【发布时间】:2022-01-23 02:26:17
【问题描述】:
我想从单个字节组成数字0xAAEFCDAB。一切都顺利到 4 个四分体,并且由于某种原因额外增加了 4 个字节。我做错了什么?
#include <stdio.h>
int main(void) {
unsigned long int a = 0;
a = a | ((0xAB) << 0);
printf("%lX\n", a);
a = a | ((0xCD) << 8);
printf("%lX\n", a);
a = a | ((0xEF) << 16);
printf("%lX\n", a);
a = a | ((0xAA) << 24);
printf("%lX\n", a);
return 0;
}
输出:
【问题讨论】:
-
long在该平台上是 8 个字节 -
你用无符号值试过了吗?
-
欢迎来到符号扩展的世界。幸运的是,您没有使用 0X7F 或更小作为第一个字节进行测试。使用
0xAAUL可以解决问题,强制((0xAAUL) << 24)表达式为unsigned long类型。就目前而言,0xAA是int。 -
不是答案,但你几乎不想使用
[unsigned] long,因为它显着的不可移植大小(Windows 上为 4,Linux 上为 8,等等)。
标签: c