我有两个字节:
byte[0]
是 0000 0000
byte[1]
为 1000 0000
我想将它们放在一起并使它们成为一个浮点值。所以结果应该是十进制的 128 和二进制的 0000 0000 1000 0000。不是负数,因为前导零。
到目前为止,我的解决方案是这种方法:
float f = (bytes[0] << 8 | bytes[1]);
但这将导致值 f 的值为负 128。我猜是因为 2s 补码。因此 byte[1]
将被解释为负数。我如何才能将 byte[0]
的前导位视为负/正位?
最佳答案
试试这个:
short int16 = (short)(((bytes[0] & 0xFF) << 8) | (bytes[1] & 0xFF));
由于运算优先级,您需要使用括号。
一旦你有了 16 位整数,你就可以将它分配给你的 float :
float f = int16;
是的,你可以一步完成,但我想一步一步来。
关于java - 将两个字节转换为 16 位有符号数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18219274/