之前在看《UNIX网络编程》这本书时有提到一种方法,利用union的性质,代码如下
#include<stdio.h>
int main()
{
union
{
short value;
char union_bytes[sizeof(short)];
}test;
test.value=0x0102;
//低位地址存放高位数据则为大端字节序
if((test.union_bytes[0]==1)&&(test.union_bytes[1]==2))
{
printf("big endian\n");
}
//小端字节序
else if((test.union_bytes[0]==2)&&(test.union_bytes[1]==1))
{
printf("little endian\n");
}
else
{
printf("unknown...\n");
}
}
在看CSAP时发现了另外一种方法,首先在C语言中一个指针,无论它指向哪种数据类型,它的值都是某个存储块的第一个字节的虚拟地址,例如一个int占4个字节,则int指针的值就是第一个字节的地址,如果把int指针强制转换为char指针,然后解引用则得到第一个字节中存放的数据,代码如下
#include <stdio.h>
#include <unistd.h>
typedef unsigned char *by