java - 如何将整数拆分为 2 字节二进制?

标签 java

给定

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/

相关文章:

java - Keytool 应用程序在哪里?

java - 如何使用 java 将八位字节流读取为纯字符串/文本?

java - 从 JFrame 显示和删除 BufferedImages (Whack-A-Mole)

java - 对同一类中的不同方法使用同步块(synchronized block)

java - CHECKCAST 是否必要?

java - 保存然后更新 Spring Data 中的实体

java - 我的 fragment 显示白屏而不是谷歌地图,为什么?

java - 我想使用正则表达式来断句

java - 在这种情况下,业务代表和服务定位器应该驻留在哪里才能不产生循环依赖?

java - 如何在 Java 中按元素大小对 ArrayList 进行排序?