我可以通过以下方式确定每个给定字节的十六进制值:
hex = char & 0xff;
例如,我的hex
值为50
。这在二进制中为 0011 0010
。
我正在查看 2^5 和 2^4 二进制位置,在我上面的示例中,该值是 11
。由于无论十六进制值如何,这都是一致的,我如何将我的 binary
值设置为等于 11
(或 2^5 和 2^4 二进制位) ?
最佳答案
这里的技巧是掩码和移位:首先,创建一个二进制“掩码”,其中包含您想要保留的位置;在您的示例中,掩码将为 0x30
.然后将二进制“与”应用于原始数字和掩码,并将结果移动较小的位位置(在本例中为 4):
hex4and5 = (ch & 0x30) >> 4;
如果这对您来说更容易,您可以反转屏蔽和移动:
hex4and5 = (ch >> 4) & 0x03; // Note that the mask is shifted, too
要从位位置列表中创建掩码,请在 1 << pos
的表达式上使用二进制“或” , 其中pos
是感兴趣的二进制位置。例如,为位置 4
构建掩码和 5
使用
int mask4and5 = (1 << 4) | (1 << 5);
关于c - 给定一个字节,从二进制中确定一个特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408081/