java - 将两个字节转换为 16 位有符号数

标签 java binary byte bytearray twos-complement

我有两个字节:

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/

相关文章:

text - 程序在内部查看文件中的字节

java - 为什么 JavaFX TreeTableView 编辑模式被意外取消?

java - 2 的最高幂但小于给定的 BigInteger

java - 具有 SqlResultSetMapping 和 native 查询的 JPA 数据存储库

python - 以读取模式 Python 3 读取二进制文件 - 在 Windows 上通过,在 Linux 上失败

java - 写入时移动文件?

java - 解压Gzip文件并存储在变量中

java - 项目POC用模拟器合适吗

c - 相当于 C 的 perl 语句

c - 使用 Valgrind 写入和读取错误