将两个字节组合成int

时间:2015-07-18 15:33:59

标签: c# byte

我有两个字节。我怎么必须通过忽略每个字节的最高有效位来组合这两个字节。

实际上两个字节是带符号的字节。所以我必须忽略最重要的位并连接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

2 个答案:

答案 0 :(得分:3)

你得到了错误的结果,因为<< has lower precedence then +。您可以使用不带括号的|执行此操作(按位操作时,按位OR比+更常见)

int ut1t2 = t1 << 7 | t2;

甚至可以在一行中完成,如下所示:

int ut1t2 = ((b1 & 127) << 7) | (b2 & 127);

答案 1 :(得分:2)

缺少括号:(

int ut1t2 = (t1 << 7) + t2; // returns 480!

你所拥有的相当于:

int ut1t2 = t1 << (7 + t2);