大端字节序和小端字节序
大端模式(大端字节序):
是指数据的低位保存在内存的高地址中,而数据的高位,保
存在内存的低地址中
小端模式(小端字节序):
是指数据的低位保存在内存的低地址中,而数据的高位保存
在内存的高地址中
判断当前机器是大端还是小端?
#include <stdio.h>
#include <windows.h>
// 方法一:访问变量的地址,如果首地址的元素是1,则表示是小端,否则就是大端
//int check_sys()
//{
// int num = 10;
// char *p = (char *)#
//
// //&num为int *
// //我们只看第一个字节所以强转为char *
//
// if( *p == 10 ) // 小端
// {
// return 0;
// }
// else // 大端
// {
// return 1;
// }
//}
// 方法二:用联合的特性:所有的成员共用一个空间
int check_sys()
{
union UN
{
char c;
int i;
}un;//un 是联合变量
un.i = 1;
// 因为成员共用一个地址空间,un.i = 1相当于低位的数值是1;
// 而存储在内存中,小端会将un.c = 1
if( un.c == 1 )
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int ret = check_sys();
if(ret == 0)
{
printf("当前机器是小端\n");
}
else
{
printf("当前机器是小端\n");
}
}