Avatar billede jespersahner Nybegynder
26. november 2004 - 16:17 Der er 13 kommentarer og
1 løsning

String til byte til char/tekst

Forhåbentlig et nemt spm., men det skal der også være plads til :-)

Med getBytes()-metoden konverteres en String til byte[].
Hvordan konverterer/cast'er jeg nu til char[]? Egentlig vil jeg bare kunne præsentere en byte-sekvens som (8-bit) tekst.

Altså:
String s = "Java rules";
byte[] b = s.getBytes();
char[] c = ...
Avatar billede arne_v Ekspert
26. november 2004 - 16:25 #1
char[] c = s.toCharArray();
Avatar billede arne_v Ekspert
26. november 2004 - 16:25 #2
Eller

char[] c = (new String(b)).toCharArray();
Avatar billede jespersahner Nybegynder
26. november 2004 - 16:26 #3
..kunne også spørge: Hvordan cast'er man double[] til int[]?
Avatar billede jespersahner Nybegynder
26. november 2004 - 16:30 #4
->arne_v: Ok, men kan jeg ikke undgå "ind-/udpakning" her?

Hvis b er byte, kan jeg skrive (char)b, og tilsvarende med int/double. Kan jeg ikke noget tilsvarende med array-udgaverne?
Avatar billede arne_v Ekspert
26. november 2004 - 16:33 #5
nej du kan ikke caste et array

du skal have en løkke omkring
Avatar billede arne_v Ekspert
26. november 2004 - 16:34 #6
Et array er et objekt.

Cast af et objekt ændrer ikke data kun opfattelsen af data.

byte[]-char[] og int[]-double[] har data af forskellige størrelse
og forskellig indhold
Avatar billede jespersahner Nybegynder
26. november 2004 - 16:39 #7
->arne_v: Øv.

Jeg er måske lidt interesseret i at kunne arbejde med 8-bit karakter-sæt (ASCII) snarere end 16-bit (Unicode), og String er jo Unicode.

Dette kommer vel ikke helt naturligt i Java, tænker jeg (?) Burde man ikke have en 8-bit udgave af String, eller kan man nemt konstruere en sådan?
Avatar billede jespersahner Nybegynder
26. november 2004 - 16:40 #8
->arne_v: Men smid da lige et svar, mens jeg pludrer videre :-)
Avatar billede arne_v Ekspert
26. november 2004 - 16:42 #9
char er også 16 bit.

Du kunne vel godt lave en klasse som encapsulatede en byte[].
Avatar billede arne_v Ekspert
26. november 2004 - 16:42 #10
svar
Avatar billede jespersahner Nybegynder
26. november 2004 - 16:50 #11
->arne_v: Jep, char er 16-bit, men byte er 8-bit, så jeg ønsker at arbejde med byte[]. Det er som sådan også fint nok med byte[], men i relation til præsentation vil jeg gerne vise byte[] som tekst.

Som du skriver, ændrer cast af et objekt ikke data men kun opfattelsen af data, og det er præcis funktionaliteten ved præsentation - et vise-format om du vil. Med new String(b) oprettes jo et nyt objekt, og egentlig vil jeg bare vise byte[] som tekst.

Kan jeg ikke det uden at oprette et String-objekt?
Avatar billede jespersahner Nybegynder
26. november 2004 - 16:52 #12
->arne_v: Når jeg overhovedet nævner char her, er det fordi "(char)byte" vises som tekst, men man kan ikke "(char[])byte[]", som du også skriver.
Avatar billede arne_v Ekspert
26. november 2004 - 16:54 #13
Du kan godt lave en løkke som udskriver (char)b[i] men jeg ved ikke om det
er hurtigere end at oprette en String
Avatar billede arne_v Ekspert
26. november 2004 - 16:56 #14
char c;
byte b;
c = (char)b;

virker fordi den laver en konvertering fra 8 til 16 bit.

char[] c;
byte[] b = new byte[3];
c = (char[])b;

vil kun lave et andet view på data og det går ikke fordi 4 bytes fylder 24 bit
men 3 chars fylder 48 bit
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