在C或C++中,您可以使用a struct
为变量分配所需的位数,如下所示:
#include <stdio.h>
struct packed {
unsigned char a:4, b:4;
};
int main() {
struct packed p;
p.a = 10;
p.b = 20;
printf("p.a %d p.b %d size %ld\n", p.a, p.b, sizeof(struct packed));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出p.a 10 p.b 4 size 1
显示p
只存储1个字节,超过4位(大于15)的数字被截断,因此20(0x14)变为4.这比使用的手动位移和屏蔽更简单.另一个答案,但它可能不会更快.
您可以在一个字节中存储两个4位数字(称为b
无符号字符).
使用hex很容易看出:b=0xAE
两个数字分别是A和E.
使用面具隔离它们:
a = (b & 0xF0) >> 4
和
e = b & 0x0F
您可以轻松定义函数,以在字节的适当部分设置/获取两个数字.
注意:如果4位数字需要有符号,那么事情会变得有点复杂,因为在打包/解包时必须正确扩展符号.