我试图了解如何使用按位与来提取单个字节的值。
我拥有的是一个 4 字节数组,并将最后 2 个字节转换为一个 2 字节值。然后我试图从那个 2 字节值中提取原始的单字节值。请参阅附件以获取我的代码和值的屏幕截图。
我遇到的问题是我无法获得 2 字节值中最后一个字节的值。
我将如何使用 Bitwise AND 执行此操作?
我试图了解如何使用按位与来提取单个字节的值。
我拥有的是一个 4 字节数组,并将最后 2 个字节转换为一个 2 字节值。然后我试图从那个 2 字节值中提取原始的单字节值。请参阅附件以获取我的代码和值的屏幕截图。
我遇到的问题是我无法获得 2 字节值中最后一个字节的值。
我将如何使用 Bitwise AND 执行此操作?
我遇到的问题是我无法获得 2 字节值中最后一个字节的值。
您的 2byte 整数由值 3 和 4 组成(因为您的指针指向a[1]
)。正如您在测试中已经看到的那样,您可以3
通过应用 mask来获得0xFF
。现在,要获得4
您需要删除低位并移动值。在您的示例中,通过使用掩码0xFF00
,您可以有效地3
从 16 位数字中删除 ,但是您将4
2 字节数字的高字节保留为值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;
您需要添加一些位移来将掩码值从高字节转换为低字节。
我遇到的问题是我无法获得 2 字节值中最后一个字节的值。
不确定该“监视”表来自何处或是否涉及更多代码,但在我看来结果是正确的。请记住,其中一个是高字节,因此值移动 << 8 位。在小端机器上,高字节将是第二个。