我有一个unsigned char,我想在最重要的四个上写0x06
,我想在它的4个最低有效位上写0x04
。
所以Char表示应该像0110 0010
有些人可以指导我如何在C中做到这一点吗?
答案 0 :(得分:3)
c = (0x06 << 4) | 0x04;
由于:
0x04 = 0000 0100
0x06 = 0000 0110
0x06<<4 = 0110 0000
or op: = 0110 0100
答案 1 :(得分:0)
使用按位移位运算符将值移动到正确的位置,并按位或组合。
unsigned char c = (0x6 << 4) | 0x4;
要反转过程并提取位域,您可以使用按位和,并使用仅包含您感兴趣的位的掩码:
unsigned char lo4 = c & 0xf;
unsigned char hi4 = c >> 4;
答案 2 :(得分:0)
首先,确保每个unsigned char
有八位:
#include <limits.h>
#if CHAR_BIT != 8
#error "This code does not support character sizes other than 8 bits."
#endif
现在,假设您已经定义了unsigned char
:
unsigned char x;
然后,如果要完全将unsigned char
设置为高4位中的6和低4位中的4,请使用:
x = 0x64;
如果要查看高位到a
而低位到b
,请使用:
// Shift a to high four bits and combine with b.
x = a << 4 | b;
如果要将高位设置为a
并保持低位不变,请使用:
// Shift a to high four bits, extract low four bits of x, and combine.
x = a << 4 | x & 0xf;
如果要将低位设置为b
并保持高位不变,请使用:
// Extract high four bits of x and combine with b.
x = x & 0xf0 | b;
以上假设a
和b
仅包含四位值。如果他们可能设置了其他位,请分别使用(a & 0xf)
和(b & 0xf)
代替上面的a
和b
。