2011-12-16 55 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