【问题标题】:Merge two bytes in java/android在 java/android 中合并两个字节
【发布时间】:2011-02-23 04:17:10
【问题描述】:

我有一个 22 字节的帧。该帧是来自加速度计通过蓝牙的输入流。加速度计读数是一个 16 位数字,分为两个字节。

当我尝试将字节与缓冲区 [1] + 缓冲区 [2] 合并时,而不是添加字节,它只是将结果并排放置。所以 1+2 = 12。

谁能告诉我如何组合这两个字节来获得原始数字。 (顺便说一句,字节是小端发送的)

谢谢

【问题讨论】:

标签: android byte multibyte


【解决方案1】:

代码如下:

public static short twoBytesToShort(byte b1, byte b2) {
          return (short) ((b1 << 8) | (b2 & 0xFF));
}

【讨论】:

  • 太好了,谢谢一百万
  • @Shane,如果这对您有用,您应该“接受”答案:)
  • 你为什么用 0xFF 对底部字节进行或运算?
  • &OxFF 是必须的!!!这是因为一些 Java 体系结构会进行整数提升,因此如果 'b2' > 127,结果将具有负号('b2' 的最高位成为符号位,因为它被提升为整数的第 32 位) .我亲眼目睹了这种情况发生在 Android 6 设备上
【解决方案2】:

这是一个更好的答案,可能更有意义......

public static short twoBytesToShort(byte b1, byte b2) {
          return (short) ((b1 << 8) | b2);
}

(b2 & 0xFF) 得到完全相同的二进制模式。

【讨论】:

  • 这是完全错误的,可能会产生错误的结果。 &OxFF 是必须的!!!这是因为一些 Java 体系结构会进行整数提升,因此如果 'b2' > 127,结果将具有负号('b2' 的最高位成为符号位,因为它被提升为整数的第 32 位) .我亲眼目睹了这种情况(在 Android 6 设备上)
猜你喜欢
  • 2016-11-15
  • 2011-03-13
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-12
  • 2021-03-20
相关资源
最近更新 更多