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

How can i store 2 numbers in a 1 byte char?

我有标题的问题,但如果不是,我怎么能只用 4 位来表示一个整数呢?

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

在 C 或 C++ 中,您可以使用 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;
}

输出为p.a 10 p.b 4 size 1,表明p只需要1个字节来存储,超过4位(大于15)的数字被截断,所以20(0x14)变成4. 这比其他答案中使用的手动位移和屏蔽更简单,但可能不会更快。

您可以在一个字节中存储两个 4 位数字(称之为 b,这是一个无符号字符)。

用十六进制很容易看出:b=0xAE中的两个数是A和E。

使用口罩隔离他们:

a = (b & 0xF0) >> 4

e = b & 0x0F

您可以轻松地将函数定义为 set/get 字节适当部分中的两个数字。

注意:如果4位数字需要有符号,事情会变得有点复杂,因为在packing/unpacking时符号必须正确扩展。