如何在 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时符号必须正确扩展。
我有标题的问题,但如果不是,我怎么能只用 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时符号必须正确扩展。