/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Problem med Javas ASCII format
Fra : Allan Olsen


Dato : 07-01-03 16:54

Hejsa
Jeg er ved at lave et fil krypteringsprogram, der benytter AES algoritmen.
Jeg er bare stødt på et problem ved implementeringen af en del af
algoritmen.

Det drejer sig hovedsageligt om, hvordan man kan overbevise java om, at den
ikke
skal lade sine ASCII bytes gå fra -127 til 128.

char a = 'ä';
byte b = (byte)a;
System.out.println(b);

Dette returnere -28.

Jeg har hentet en ASCII tabel på nettet og der går nummereringen fra 00 til
256/ff.

http://www.linuxvalley.it/encyclopedia/ldp/manpage/man7/ascii.7.php

Hvis jeg kigger på tegnet 'ä', så burde det i følge min tabel have værdien
132, hvilket
svarer til 84 i Hex.

Det er vigtigt for mig, at tallet bliver 84 i hex og ikke -28 i bytes(hvad
er det mon
ogsåå i hex???), da jeg ud fra 84 skal slå op i en hemmelig matrix og finde
matrix[8][4].
Denne matrix indeholder forresten også hex tallene fra 00 til ff, så jeg kan
jo risikere
at den returnerede værdi bliver ff hvilket jeg ikke kan skrive tilbage til
filen som ASCII
karakter.

Så spørgsmålet er:
Hvordan dælen kan jeg smart omgå, at min transformationsmatrix benytter
ascii hex værdier
fra 0 til ff og java benytter -127 til 128.

Håber nogen har nogle gode ideer.


ps. Hvor kan man finde en liste over javas ASCII nummerering.



 
 
Anders K. Olsen (07-01-2003)
Kommentar
Fra : Anders K. Olsen


Dato : 07-01-03 17:46

"Allan Olsen" <sandrasmurf@hotmail.com> skrev i en meddelelse
news:avestr$ht6$1@eising.k-net.dk...
> Hejsa
> Jeg er ved at lave et fil krypteringsprogram, der benytter AES algoritmen.
> Jeg er bare stødt på et problem ved implementeringen af en del af
> algoritmen.
>
> Det drejer sig hovedsageligt om, hvordan man kan overbevise java om, at
den
> ikke
> skal lade sine ASCII bytes gå fra -127 til 128.

Den eneste primitive datatype som er unsigned i Java, er char, men den er på
16 bit. Hvis du vil arbejde med en primitiv datatype, som kan håndtere
intervallet [0,256], så kan du ikke bruge byte. Er det vigtigt for dig,
hvordan en byte bliver vist på skræmen? Det ændrer jo ikke hvordan tallet
bliver representeret i bit.

En anden ting du evt. skal være opmærksom på, hvis du vælger at bruge byte
til at representere dine værdier, er at resultatet af aritmetiske
operationer som fx. +,-,*,/ altid er mindst en int.

> Så spørgsmålet er:
> Hvordan dælen kan jeg smart omgå, at min transformationsmatrix benytter
> ascii hex værdier
> fra 0 til ff og java benytter -127 til 128.
>
> Håber nogen har nogle gode ideer.

Hvad med at bruge en datatype som ikke løber ind i fortegnsproblemerne. Fx.
int. Så er du heller ikke nødt til at caste hvis du skal lave aritmetiske
operationer. Du skal dog så være opmærksom på overløb. Hvis du vil have alle
de tegn med som der kan være i en Java String variable, er du alligevel nødt
til at bruge noget andet end byte, nemlig minimum en char.

> ps. Hvor kan man finde en liste over javas ASCII nummerering.

Java gemmer en String som Unicode tegn, dvs. 16 bit pr. tegn. Det er også
derfor at char typen er på 16 bit.

ASCII er dog en standard, som rent faktisk kun er på 7 bit. Så hvis de
højeste 9 bit er 0, er de resterende 7 bit ens for ASCII og Javas
representation af et tegn. Den tabel du henviser til i din post viser
faktisk kun de 7 bit ASCII værdier, så hvis du kan nøjes med disse værdier
løber du ikke ind i problemer med fortegn. Det er først når du vil til at
representere 8 bit værdier som fx. ISO-8859-1 at du løber ind i dine
problemer. Se fx.
http://www.linuxvalley.it/encyclopedia/ldp/manpage/man7/iso_8859_1.7.php

/Anders



Søg
Reklame
Statistik
Spørgsmål : 177492
Tips : 31966
Nyheder : 719565
Indlæg : 6408466
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste