我想从单独的字节中组成数字
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个字节。 - phuclv0xAAUL
可以解决问题,将((0xAAUL) << 24)
表达式强制转换为类型unsigned long
。目前,0xAA
是一个int
类型。 - Jonathan Leffler[unsigned] long
,因为它的大小在不同操作系统上显著不可移植(在Windows上为4,在Linux上为8等)。 - HolyBlackCat