[J2ME] Int in Byte Array umwandeln und zurück.
-
Hallo,
ich muss ein Int in ein Byte Array umwandeln und zurück.
Dafür verwende ich folgendes Verfahren:
public class KnownFileTester { public static byte[] intToByte( int number ) { byte[] buffer = new byte[4]; int i = 0; buffer[i++] = (byte)( ( number & 0xff000000 ) >> 24 ); buffer[i++] = (byte)( ( number & 0xff0000 ) >> 16 ); buffer[i++] = (byte)( ( number & 0xff00 ) >> 8 ); buffer[i++] = (byte)( number & 0xff ); return buffer; } public static int byteToInt( byte[] input ) { int result = 0; int i = 0; result = input[i++] << 24; result = result | (input[i++] << 16); result = result | (input[i++] << 8); result = result | input[i++]; return result; } public static void main(String[] args) { for( int i = 0; i < 1024; i++ ) System.err.println( "" + i + " = " + byteToInt( intToByte(i) ) ); } }
Einige Zahlen werden dabei richtig umgewandelt, andere leider nicht.
Hier ein pat auszüge der Ausgabe.
0 = 0 1 = 1 2 = 2 3 = 3 4 = 4 5 = 5 6 = 6 7 = 7 8 = 8 9 = 9 10 = 10 11 = 11 12 = 12 13 = 13 14 = 14 15 = 15 16 = 16 17 = 17 18 = 18 19 = 19 20 = 20 . . . 125 = 125 126 = 126 127 = 127 128 = -128 129 = -127 130 = -126 . . . 253 = -3 254 = -2 255 = -1 256 = 256 257 = 257 258 = 258 . . .
Ich vermute, dass das Problem die Tyenumwandlung von int nach byte in intToByte( int ) ist.
Hat jemand eine Idee?
Gruß,
ich
-
Da Bytes, deren erstes Bit eine 1 ist, von Java als negativ angesehen werden, muss man immer ein wenig tricksen.
Um den Bereich 0 - 255 von einem Byte zu erhalten, hilft schon folgendes:
byte b = (byte)223; System.out.println(b & 0xFF);
In deinem Fall könnte schon das hier klappen:
public static int byteToInt( byte[] input ) { int result = 0; int i = 0; result = (input[i++] & 0xFF)<< 24; result = result | ( (input[i++] & 0xFF) << 16); result = result | ((input[i++] & 0xFF) << 8); result = result | (input[i++] & 0xFF); return result; }
-
Super, es funktioniert jetzt. Vielen Dank!