Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从给定字节的二进制文件中确定特定值_C_Binary_Hex - Fatal编程技术网

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);