Avatar billede moxa Nybegynder
25. marts 2006 - 13:49 Der er 3 kommentarer

Inputstreams og chars

Hejsa.
Jeg har følgende kode (udpluk):

BufferedReader in = new BufferedReader(new InputStreamReader(link.getInputStream()));
            PrintWriter out = new PrintWriter(link.getOutputStream(), true);

så vil jeg gerne læse ind fra in, og det gør jeg således:

int temp;
temp = in.read(); <- her opstår mit problem!

Sagen er den, at jeg (i en do-while) modtager 1 byte ad gangen. det er bare ikke skidefedt, når byten (i dec.) bliver over 127 - for så får jeg en unicode-etellerandet-stads som et tal på 8000+ i  stedet som jeg (vidst nok) ikke kan omregne tilbage igen.

eksempelvis modtager jeg på et tidspunkt 139, som jo som bekendt er større end 127! - og så går det galt - så får jeg 8249 i stedet.

Jeg er overbevist om, at der er mange derude, der har haft en lignende oplevelse, og (forhåbentlig!) har en løsning til dette.

har I nogen forslag? :P
Avatar billede driis Nybegynder
25. marts 2006 - 14:20 #1
unsigned int temp;
temp = (unsigned int)in.read();

?
Avatar billede moxa Nybegynder
25. marts 2006 - 14:33 #2
tja... det her er java, ikke C eller C++, så der findes ikke noget unsigned stads... :)

i øvrigt har jeg selv fundet svaret i mellemtiden ved at lave min inputstream anderledes (og en del mere simpel):

InputStream in = link.getInputStream();

men ellers tak for henvendelsen :)
Avatar billede jakoba Nybegynder
25. marts 2006 - 19:21 #3
typen byte er signed, så når en byte castes til en int bliver det et negativet tal hvis den byte har øverste bit sat.

fx: byte  128 = 10000000  bliver til int 11111111111111111111111110000000

men i denne situation ønsker vi at få den unsigned. det kan gøres med:

byte var1 = 128;
int  var2 = 0x000000ff & (int)var1;

så ender vi med en int der indeholder 00000000000000000000000010000000 sådan som vi ønsker.
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