将两个字节组合成int
本文关键字:字节 组合 int 两个 | 更新日期: 2023-09-27 18:03:25
我有两个字节。无论如何,我必须通过忽略每个字节的最高有效位来组合这两个字节。
实际上有两个字节是带符号字节。所以我必须忽略最高有效位,并连接剩下的7位。
这里是我的代码与简单的例子。我得到每个字节的最后7位。然后我左移第一个字节7,然后加上第二个字节。但是它没有给出正确的结果。byte b1 = 131; // 10000011
byte b2 = 96; // 01100000
//Ignoring most significant bit and get 7 remaining bits.
byte t1 = (byte) (b1 & 127); // 0000011 in 8-bits saved as 00000011
byte t2 = (byte) (b2 & 127); // 1100000 in 8-bits saved as 01100000
// Left shift first byte by 7. and add the second byte
// t1: 00000011 0000000
// t2: 0 1100000 +
// 00000011 1100000 =
int ut1t2 = t1 << 7 + t2; // 480 is expected but it gives 384
您会得到错误的结果,因为<<
的优先级低于+
。您可以使用不带括号的|
(位或在操作位时比+
更常见)
int ut1t2 = t1 << 7 | t2;
或者在一行中完成,像这样:
int ut1t2 = ((b1 & 127) << 7) | (b2 & 127);
缺少括号:
int ut1t2 = (t1 << 7) + t2; // returns 480!
你得到的等于:
int ut1t2 = t1 << (7 + t2);