Eri*_*sum 9 java byte type-conversion
我需要做的就是将无符号的两字节数组转换为整数.我知道,我知道,Java没有无符号数据类型,但我的数字是假装无符号字节.
byte[] b = {(byte)0x88, (byte)0xb8}; // aka 35000
int i = (byte)b[0] << 8 | (byte)b[1];
Run Code Online (Sandbox Code Playgroud)
问题是没有正确转换,因为它认为那些是有符号的字节...如何将其转换回int?
rge*_*man 19
Java,字节或整数或其他任何东西都没有无符号数.当字节转换为比特int移位之前,它们是符号扩展的,即0x88=> 0xFFFFFF88.你需要掩盖你不需要的东西.
试试这个
int i = ((b[0] << 8) & 0x0000ff00) | (b[1] & 0x000000ff);
Run Code Online (Sandbox Code Playgroud)
你会得到35000.
您可以使用
int i = ((b[0] & 0xFF) << 8) | (b[1] & 0xFF);
Run Code Online (Sandbox Code Playgroud)
或者
int i = ByteBuffer.wrap(b).getChar();
Run Code Online (Sandbox Code Playgroud)
或者
int i = ByteBuffer.wrap(b).getShort() & 0xFFFF;
Run Code Online (Sandbox Code Playgroud)