2011-12-16 94 views
1

我正在開發Android中的一個軟件。在軟件的特定部分,我需要將短轉換爲字節並將其重新轉換爲短。我嘗試了下面的代碼,但轉換後的值不一樣。在Android中短字節和字節到空格的轉換

short n, n1; 
    byte b1, b2; 
    n = 1200; 
    // short to bytes conversion 
    b1 = (byte)(n & 0x00ff); 
    b2 = (byte)((n >> 8) & 0x00ff); 

    // bytes to short conversion 
    short n1 = (short)((short)(b1) | (short)(b2 << 8)); 

執行完代碼後n和n1的值不相同。爲什麼?

+0

http://stackoverflow.com/questions/2188660/convert-short-to-byte-in-java – GETah 2011-12-16 11:55:39

回答

5

我沒有得到Grahams解決方案的工作。這一點,但是做的工作:

n1 = (short)((b1 & 0xFF) | b2<<8); 
1

您可以使用字節緩衝區:

final ByteBuffer buf = ByteBuffer.allocate(2); 
buf.put(shortValue); 
buf.position(0); 

// Read back bytes 
final byte b1 = buf.get(); 
final byte b2 = buf.get(); 

// Put them back... 
buf.position(0); 
buf.put(b1); 
buf.put(b2); 

// ... Read back a short 
buf.position(0); 
final short newShort = buf.getShort(); 

編輯:固定的API使用。嘎。

+0

這是一個絕對的矯枉過正,在OP的問題都待解決的重複只需使用按位運算符,如@ Jave的答案 – 2011-12-16 12:07:20

+0

除了此解決方案不關心字節序! – fge 2011-12-16 12:08:37