PDA

View Full Version : [Java] Da byte ad intero


tidus8
30-12-2006, 21:31
Ragazzi mi serve una mano. Ho un file binario creato in C++ e rappresentante interi...gli interi sono da 4 byte e con un programmino in java mi interessava leggere il file a porzioni di 4 byte e ricavarmi ogni volta l'intero corrispondente....Sapete darmi una mano?

MEMon
31-12-2006, 09:47
non so se ho capito bene, ma se vuoi dividere un int in 4 parti credo ti basti fare qualche shift e castarlo in byte, credo eh...
una cosa del genere

int i;
byte b;
b=(i>>4)&0000000000001111;

andbin
31-12-2006, 10:50
Ragazzi mi serve una mano. Ho un file binario creato in C++ e rappresentante interi...gli interi sono da 4 byte e con un programmino in java mi interessava leggere il file a porzioni di 4 byte e ricavarmi ogni volta l'intero corrispondente....Sapete darmi una mano?La soluzione veloce:

int val = byte1 & 0xFF | (byte2 & 0xFF) << 8 | (byte3 & 0xFF) << 16 | (byte4 & 0xFF) << 24;

dove byte1 è chiaramente il LSB e byte4 è il MSB. Poi come prendere i singoli byte dal file, dipende se l'intero è memorizzato in formato Little-Endian o Big-Endian.

Una soluzione più completa e pulita sarebbe quella di creare una nuova classe, es. IntegerReader a cui passi un InputStream. La classe potrebbe ad esempio contenere un metodo readInt(). ;)

Nota che esistono già delle classi in java.io per scrivere/leggere tipi primitivi su stream. Sono le classi DataOutputStream e DataInputStream. L'unica cosa è che, per gestire la lettura/scrittura in modo indipendente dalla piattaforma, gestiscono i dati esclusivamente in formato Big-Endian.