[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!


Log in to reply