c - 给定一个字节,从二进制中确定一个特定值

标签 c binary hex

我可以通过以下方式确定每个给定字节的十六进制值:

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/

相关文章:

c - C 中的十六进制浮点常量

compression - 为什么这个C程序填充驱动器C :\?

linux - 如何构建相同的 Linux 内核两次源并获得相同的校验和

c++ - 十进制转二进制,奇怪的输出

linux - 如何在 Bash 中进行内存中的二进制搜索?

将 int 转换为十六进制格式的字符串

c++ - 如何将 long long ASCII 十六进制值转换为字符串?

c - 二进制 * 的无效操作数(有 'char *' 和 'int *' )

c - 从数组中读取带有C空格的整数

c - 为什么 glib 数组使用未初始化的内存?