Avatar billede ladyhawke Novice
22. maj 2001 - 15:27 Der er 16 kommentarer og
1 løsning

fra byte[] til String t/r

Jeg vil gerne kunne konvertere et byte[] til en String og tilbage igen uden at miste informationer, findes der en god måde at gøre det på?

Avatar billede disky Nybegynder
22. maj 2001 - 15:33 #1
jeg kan ikke lige huske om det findes en nem metode.

men prøv dette her:

byte data[]=new byte[50];
String text;
for(int x=0;x<data.length;x++)
{
text+=(char)data[x];
}


Hvis du vil lave det rigtigt pænt bruger du string buffer i stedet.
Avatar billede ladyhawke Novice
22. maj 2001 - 15:42 #2
jeg har prøvet noget der ligner, men hvis byte værdien er over 127, så bliver char værdien 63, det kan jeg ikke bruge, for det ødelægger jo alle data med en byteværdi uden for intervallet 0->127...
Avatar billede disky Nybegynder
22. maj 2001 - 15:44 #3
ups havde jeg glemt.

Prøv dette her:

byte data[]=new byte[50];
String text;
for(int x=0;x<data.length;x++)
{
text+=((int)data[x])&0xff;
}


Avatar billede agermose Nybegynder
22. maj 2001 - 15:44 #4
String str = new String(bytearray);
byte[] array = str.getBytes();
Avatar billede agermose Nybegynder
22. maj 2001 - 15:45 #5
med tilhørende variationer til andre Locale\'s
Avatar billede disky Nybegynder
22. maj 2001 - 15:45 #6
flovt jeg skulle have vist der fandtes en constructor der kunne gøre det
Avatar billede delbing Nybegynder
22. maj 2001 - 15:45 #7
Strings har en constructor der tager et byte[] som argument, og en metode getBytes() som returneres et byte[]. dvs:

byte[] data;
...

String stringFromBytes = new String(data);

byte[] bytesFromString = stringFromBytes.getBytes();

Avatar billede logical Nybegynder
22. maj 2001 - 15:46 #8
prøv med

byte[] data = ...
String text = new String[data];

Vær opmærksom på, at konvertering fra bytes til karakterer betyder omformning i forhold til platformens tegnsæt. Det går som regel godt her i DK.

Fra en String kan du iøvrigt gøre det omvendte,
byte[] data = text.getBytes();

De to metoder anvender samme \"encoding\", så resultatet burde blive det samme
Avatar billede delbing Nybegynder
22. maj 2001 - 15:48 #9
ladyhawke, jeg tvivler på at byteværdien nogensinde er over 127...
Avatar billede disky Nybegynder
22. maj 2001 - 15:51 #10
helt enig med delbing: en byte kan max være 127 og min være -128

alle java primitive data typer er med fortegn, med undtagelse af char.

boolean er helt uden for denne type datatyper
Avatar billede ladyhawke Novice
22. maj 2001 - 16:02 #11
Hvis jeg gør følgende:

String str = new String(dataBuffer);
byte[] array = str.getBytes();
boolean eq = java.util.Arrays.equals(array, dataBuffer);

så bliver eq false!
Avatar billede delbing Nybegynder
22. maj 2001 - 16:07 #12
prøv at se om længden er den samme af de to arrays.
Avatar billede delbing Nybegynder
22. maj 2001 - 16:16 #13
pga. byte-encodingen kan str.length() godt blive længere end dataBuffer.length.
Jeg ved faktisk ikke hvilke encodings der bevarer længde. Prøv at angive UTF-8, US-ASCII eller ISO-8859-1 som String som ekstra parameter. Hvis dataBuffer er et field kan du:

testEnc(\"UTF-8\");
testEnc(\"US-ASCII\");
testEnc(\"ISO-8859-1\");


void testEnc(String enc) {

String str = new String(dataBuffer, enc);
byte[] array = str.getBytes(enc);
boolean eq = java.util.Arrays.equals(array, dataBuffer);
System.out.println(enc + \": \" + eq);
}
Avatar billede ladyhawke Novice
22. maj 2001 - 16:18 #14
den er ens...
Avatar billede ladyhawke Novice
22. maj 2001 - 16:21 #15
h.. jeg læste ikke helt det du skrev, men de to arrays har samme længde... og det samme gælder for streng og databuffer...
Avatar billede ladyhawke Novice
22. maj 2001 - 16:27 #16
databuffer er et byte[]... se i øvrigt nyt spørgsmål
Avatar billede delbing Nybegynder
22. maj 2001 - 16:31 #17
øh ja, field som i member variabel, der er deklareret udenfor metoderne. I modsætning til lokale variable, som deklareres i en metode og ikke kan refereres til udefra denne metode.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester