View Full Version : come inizializzo un array di byte?
danyroma80
23-05-2007, 07:17
Sto scrivendo un'applicazione java che comunica con un'altra applicazione tramite socket. Le funzioni che ho a disposizione sono read e write che prendono come argomenti un array di byte.
Quando definisco ad esempio
byte[] a;
come lo inizializzo? come faccio a scriverci dentro i byte che voglio siano spediti dall'altra parte?
Fenomeno85
23-05-2007, 08:05
Sto scrivendo un'applicazione java che comunica con un'altra applicazione tramite socket. Le funzioni che ho a disposizione sono read e write che prendono come argomenti un array di byte.
Quando definisco ad esempio
byte[] a;
come lo inizializzo? come faccio a scriverci dentro i byte che voglio siano spediti dall'altra parte?
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Byte.html
vedi se ti può essere utile usare la classe Byte .. oppure ci scrivi in modo diretto nel tipo primitivo
~§~ Sempre E Solo Lei ~§~
danyroma80
23-05-2007, 08:30
come faccio a scriverci in modo diretto?
vorrei riempire ogni byte dell'array con un numero che va da 0 a 255 in decimale oppure da 00 a FF in esadecimale ma ovviamene non posso utilizzare banalmente gli int visto che ognuno è rappresentato da 4 byte anche se il numero è inferiore a 255 e ne basterebbe uno solo.
come faccio a scriverci in modo diretto?
vorrei riempire ogni byte dell'array con un numero che va da 0 a 255 in decimale oppure da 00 a FF in esadecimale ma ovviamene non posso utilizzare banalmente gli int visto che ognuno è rappresentato da 4 byte anche se il numero è inferiore a 255 e ne basterebbe uno solo.Fare un cast a byte? ;)
danyroma80
23-05-2007, 08:41
Fare un cast a byte? ;)
no perchè così i numeri da 128 a 255 me li rappresenta negativi
no perchè così i numeri da 128 a 255 me li rappresenta negativiAllora ....
1) In Java un byte ha valori in un range -128 ~ +127 e basta.
2) Dipende da cosa ci devi fare con quei byte. Se da un int 212 (0xD4) ottieni un byte che ha quindi valore -44, dipende da cosa ci devi poi fare.
Se da qualche parte vuoi riottenere un int, farai b & 0xFF, e riottieni 212 (0xFF è una costante int, il byte viene portato a int ma limitato, con la AND, a 8 bit).
Intendo dire ... chissenefrega se diventa negativo ... dipende da cosa ci devi fare!!
danyroma80
23-05-2007, 10:03
dall'altra parte ho una applicazione symbian che in base ai byte che arrivano fa determinate operazioni. Questa applicazione non l'ho scritta io e quindi non posso modificarla.
Ad esempio se questa legge il byte FE ovvero 254 in decimale fa una determinata operazione.
Ora come gli invio 254 in rete?
int i=254;
byte a=(byte)i;
outputs.write(a);
In rete viene effettivamente spedito 11111110 in binario?
dall'altra parte ho una applicazione symbian che in base ai byte che arrivano fa determinate operazioni. Questa applicazione non l'ho scritta io e quindi non posso modificarla.
Ad esempio se questa legge il byte FE ovvero 254 in decimale fa una determinata operazione.Quindi, presumo io, il byte lo tratta come unsigned.
Ora come gli invio 254 in rete?
int i=254;
byte a=(byte)i;
outputs.write(a);
In rete viene effettivamente spedito 11111110 in binario?Certamente! Quello che viene spedito è appunto 0xFE (11111110 in binario). Poi dipende da come lo si vuole interpretare, se con segno allora è -2, se senza segno allora è 254. La questione è tutta lì.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.