每个大于 char 的整数类型都考虑了小端和大端的概念。
当您编写 C 代码时,您不必担心小端和大端。例如,如果您有 int X=100, Y=200;,那么 X+Y 在 C 的每个实现上都会一直返回 300。
但是,当您需要在机器之间传送数据时,您需要考虑到您可能会在大端机器上接收来自小端的数据,反之亦然。在这种情况下,您需要将小端转换为大端(为此,套接字库具有专门的功能)。
另一方面,在 C 中,int 类型的整数不是保存在 16 位上,而是至少保存在 16 位上。
要查看机器是小端还是大端,您可以将值 X 初始化为 256 并提取前 8 位并查看它们是否为 0。 *((unsigned char*)&X)&((1<<8)-1))!=0。根据此表达式的结果,您可以定义宏 LITTLE_ENDIAN 或 BIG_ENDIAN
要读取整数的每个字节,可以定义这样的结构
typedef struct {
#if LITTLE_ENDIAN
unsigned char low;
unsigned char high;
#elif BIG_ENDIAN
unsigned char high;
unsigned char low;
#endif
} order_integer;
然后您可以使用
对整数进行排序
x=400;
order_integer *o=(order_integer*)&x;
printf("%u %u\n", o->low, o->high);
如果您想从寻址 124 和 125 读取整数(假设您检查并确定 sizeof int = 2),那么您可以这样做:
order_integer *o = (order_integer*)124;
printf("%u %u\n", o->low, o->high);