C 从给定字节的二进制文件中确定特定值
我可以通过执行以下操作来确定每个给定字节的十六进制值:C 从给定字节的二进制文件中确定特定值,c,binary,hex,C,Binary,Hex,我可以通过执行以下操作来确定每个给定字节的十六进制值: hex=char&0xff 例如,我的hex值是50。这是二进制的00110010 我看的是2^5和2^4的二进制位置,在上面的例子中,这个值是11。因为无论十六进制值是多少,这都是一致的,我如何将我的二进制值设置为等于11(或者设置为2^5和2^4二进制位置)?这里的诀窍是屏蔽和移位:首先,创建一个二进制“屏蔽”,在您想要保留的位置上有一个“屏蔽”;在您的示例中,掩码应该是0x30。然后将二进制“and”应用于原始数字和掩码,并将结果移动
hex=char&0xff代码>
例如,我的hex
值是50
。这是二进制的00110010
我看的是2^5和2^4的二进制位置,在上面的例子中,这个值是11
。因为无论十六进制值是多少,这都是一致的,我如何将我的二进制
值设置为等于11
(或者设置为2^5和2^4二进制位置)?这里的诀窍是屏蔽和移位:首先,创建一个二进制“屏蔽”,在您想要保留的位置上有一个“屏蔽”;在您的示例中,掩码应该是0x30
。然后将二进制“and”应用于原始数字和掩码,并将结果移动较小位位置的位置(在本例中,即4):
如果让事情变得更容易,您可以反转掩蔽和移动:
hex4and5 = (ch >> 4) & 0x03; // Note that the mask is shifted, too
若要从位位置列表制作掩码,请在1的表达式上使用二进制“or”。我不确定我是否理解这个问题,是否要提取这两个位的值?@Hasturkun Yes。在这个问题的范围之外,我可以将这些特定位的值转换为十进制。您也可以使用位字段,但您必须知道计算机的体系结构和编译器设置。@EricJablow谢谢您提供的信息。就我的情况而言,体系结构等可能会发生变化……因此使用位字段可能对我不起作用。C语言的级别足够低,因此位字段是可能的。但在处理您无法控制的体系结构时,它们肯定不稳定。
hex4and5 = (ch >> 4) & 0x03; // Note that the mask is shifted, too
int mask4and5 = (1 << 4) | (1 << 5);