1

我可以通过执行以下操作来确定每个给定字节的十六进制值:

hex = char & 0xff;

例如,我的hex值为50. 这在二进制中是0011 0010.

我正在查看 2^5 和 2^4 二进制位置,在我上面的示例中的值是11. 由于无论十六进制值如何,这都是一致的,我如何将我的binary值设置为等于11(或等于 2^5 和 2^4 二进制位)?

4

1 回答 1

2

这里的技巧是掩码和移位:首先,创建一个二进制“掩码”,其中包含您想要保留的位置;在您的示例中,掩码为0x30. 然后将二进制“and”应用于原始数字和掩码,并将结果移动较小位位置的位置(在本例中为 4):

hex4and5 = (ch & 0x30) >> 4;

如果它让您更轻松,您可以反转遮罩和移位:

hex4and5 = (ch >> 4) & 0x03; // Note that the mask is shifted, too

要从位位置列表中制作掩码,请在 的表达式上使用二进制“或” 1 << pos,其中pos是感兴趣的二进制位置。例如,为位置构建掩码45使用

int mask4and5 = (1 << 4) | (1 << 5);
于 2013-10-16T15:59:21.610 回答