/ / Java konwertuje długie na 4 bajty - java, bytearray, byte, long-integer, unsigned

Java konwertuje do 4 bajtów - java, bytearray, bajt, long-integer, unsigned

Jak przekonwertować długi do 4 bajtów? Otrzymuję dane wyjściowe z programu w języku C i używa ono długiego bez znaku. Muszę przeczytać to wyjście i przekonwertować na 4 bajty.

Jednak Java używa podpisanej długości, która wynosi 64 bity. Czy jest jakiś sposób na wykonanie tej konwersji?

Odpowiedzi:

9 dla odpowiedzi № 1

Aby odczytać 4 bajty jako 32-bitową wartość bez znaku, zakładając, że jest to mało endian, najprostszą rzeczą do zrobienia jest użycie ByteBuffer

byte[] bytes = { 1,2,3,4 };
long l = ByteBuffer.wrap(bytes)
.order(ByteOrder.LITTLE_ENDIAN).getInt() & 0xFFFFFFFFL;

Podczas l może być podpisaną wartością 64-bitową, będzie to tylko od 0 do 2 ^^ 32-1, co jest zakresem 32-bitowej wartości bez znaku.


1 dla odpowiedzi nr 2

Możesz użyć java.nio.ByteBuffer. Może parsować długi i porządkuje bajty dla ciebie.


1 dla odpowiedzi nr 3

Możesz zakodować pętlę, w której dzielisz „długi”do 256, weź resztę, wtedy masz „Najmniej znaczący bajt” ... (w zależności od tego, czy chcesz little-endian czy big-endian, możesz zapętlać w przód lub w tył)

  long l = (3* 256 * 256 * 256 + 1 * 256 *256 + 4 * 256 + 8);
private byte[] convertLongToByteArray(long l) {
byte[] b = new byte[4];
if(java.nio.ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN){
for (int i=0; i<4; i++) {
b[i] = (byte)(l % 256) ;
l = l / 256;
}
}else{
for (int i=3; i>=0; i--) {
b[i] = (byte)(l % 256) ;
l = l / 256;
}
}
return b;
}