1

我试图了解如何使用按位与来提取单个字节的值。

我拥有的是一个 4 字节数组,并将最后 2 个字节转换为一个 2 字节值。然后我试图从那个 2 字节值中提取原始的单字节值。请参阅附件以获取我的代码和值的屏幕截图。

我遇到的问题是我无法获得 2 字节值中最后一个字节的值。

我将如何使用 Bitwise AND 执行此操作?

按位与

4

3 回答 3

5

我遇到的问题是我无法获得 2 字节值中最后一个字节的值。

您的 2byte 整数由值 3 和 4 组成(因为您的指针指向a[1])。正如您在测试中已经看到的那样,您可以3通过应用 mask来获得0xFF。现在,要获得4您需要删除低位移动值。在您的示例中,通过使用掩码0xFF00,您可以有效地3从 16 位数字中删除 ,但是您将42 字节数字的高字节保留为值1024 == 2^10- 第 11 位设置,这是第二个字节中的第三位(从最小的代表开始计算)

您可以将该结果向右移动 8 位以获得您的4,否则您可以完全忽略掩码,因为只需向右移动最低位就会消失

4 == ( x>>8 )

更有趣的按位测试结果可以通过使用单个数字来获得:

int x = 7;              // or char, for what matters:
(x & 0x1) == 1;
(x & (0x1<<1) ) == 2;   // (x & 0x2)
(x & ~(0x2)) == 5;
于 2012-04-29T15:21:14.700 回答
3

您需要添加一些位移来将掩码值从高字节转换为低字节。

于 2012-04-29T15:19:34.917 回答
0

我遇到的问题是我无法获得 2 字节值中最后一个字节的值。

不确定该“监视”表来自何处或是否涉及更多代码,但在我看来结果是正确的。请记住,其中一个是高字节,因此值移动 << 8 位。在小端机器上,高字节将是第二个。

于 2012-04-29T15:19:42.297 回答