如何在1字节的char中存储2个数字?

pap*_*iro 1 c c++ binary fortran bcd

我有标题的问题,但如果没有,我怎么能只使用4位表示整数?

编辑真的我的问题是如何.我知道像c这样的语言有1个字节的数据结构,但是我怎么能用char之类的东西来存储两个整数呢?

kra*_*avi 5

在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.这比使用的手动位移和屏蔽更简单.另一个答案,但它可能不会更快.


Pyn*_*hia 5

您可以在一个字节中存储两个4位数字(称为b无符号字符).

使用hex很容易看出:b=0xAE两个数字分别是A和E.

使用面具隔离它们:

a = (b & 0xF0) >> 4

e = b & 0x0F

您可以轻松定义函数,以在字节的适当部分设置/获取两个数字.

注意:如果4位数字需要有符号,那么事情会变得有点复杂,因为在打包/解包时必须正确扩展符号.