给定
private int width = 400;
private byte [] data = new byte [2];
我想将整数“宽度”分成两个字节,并用高字节加载 data[0],用低字节加载 data[1]。
即二进制值 400 = 1 1001 0000 所以 data[0] 应该包含 0000 0001 和 data[1] 应该包含 1001 0000
最佳答案
使用简单的按位运算:
data[0] = (byte) (width & 0xFF);
data[1] = (byte) ((width >> 8) & 0xFF);
工作原理:
& 0xFF
屏蔽除最低八位以外的所有位。>> 8
通过将所有位向右移动 8 位来丢弃最低 8 位。- 强制转换为字节是必要的,因为这些按位操作适用于
int
并返回int
,它是比byte
更大的数据类型>。这种情况是安全的,因为所有非零位都适合byte
。如需更多信息,请参阅 Conversions and Promotions .
编辑: Taylor L正确地指出,尽管 >>
在这种情况下有效,但如果将此代码概括为 4 个字节,它可能会产生不正确的结果(因为在 Java 中是一个 int
是 32 位)。在这种情况下,最好使用 >>>
而不是 >>
。如需更多信息,请参阅 Java tutorial on Bitwise and Bit Shift Operators .
关于java - 如何将整数拆分为 2 字节二进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1735840/