数据0XF432:
----小端模式:x86的cpu在内存中存储的是0x32, 0xF4
----大端模式:一些RISC架构的处理器在内存中存储的是0xF4, 0x32
方法1:利用联合的特点。联合中的数据成员是共享存储空间的,所分配的空间为数据成员最大所需的内存数。程序定义了endian_un的联合体,其中包含两个数据成员,一个是short类型的数据成员var(32位系统为2字节),一个是字符类型的字符数组bits,字符数组的元素个数为short类型的字节数。
程序将var赋值为0x0102,由于联合结构的特点,bits字符串数组中同样存储了0x0102这一数值。通过判断字符串中的低位和高位存储的内容,就可以知道系统是little-endian还是big-endian的
方法2:通过强制类型转换。程序中通过取flag变量的地址,获得起始空间的存储内容。如果起始空间存储的是数据的低位内容,则为little-endian,否则为big-endian
#include <stdio.h>
int is_little_endian(void){
unsigned short flag = 0x4321;
if(*(char*)&flag == 0x21){
return 1;
else
return 0;
}
int main(void){
union endian_un{
short var;
char bits[sizeof(short)];
};
flag.var = 0x0102;
if(sizorf(short) == 2){
if(flag.bits[0] == 1 && flag.bits[1] == 2)
printf("judged by first method,little_endian\n");
if(flag.bits[0] == 2 && flag.bits[1] == 1)
printf("judged by first method, big_endian\n");
}
if(is_little_endian())
printf("judged by second method, little_endian\n");
else
printf("judged by second method , big_endian\n");
return 0;
}
网络中的传送的数据都是大端模式
linux提供了htons,htonl,ntohl,ntohl四个函数用于转换