【C语言】大小端的问题
2011-04-27 08:44
302 查看
在计算机中数据一般都先存在内存中,(拿32位机来说)系统为内存的每一个位置都分配了一个地址.地址
从0x00000000开始到0xffffffff(也许你的内存没这么大).
那么对于小端(Little-Endain)来说,数据0x12345678在内存中的映像就是这个样子的:
________
78 0x00000000
56 0x00000001
34 0x00000002
12 0x00000003
也就是说小端是低位数据放在低地址,像i386(x86)就是这种处理器.
而大端正好相反:
________
12 0x00000000
34 0x00000001
56 0x00000002
78 0x00000003
也就是说大端是低位数据放在低地址,像SuperH4就是这种处理器.
测试大小端代码:
void main()
{
int IsBigLitEnd(void);
int a;
a = IsBigLitEnd();
if(1==a)
{
printf("当前系统为大端对齐!/n");
}
else if(0 == a)
{
printf("当前系统为小端对齐!/n");
}
else
{
printf("出错!/n");
}
}
int IsBigLitEnd(void)
{
int wTest = 0x1234;
char* puTest = (char*)&wTest;
if (0x12 == puTest[0])
{
return 1; //大端对齐
}
else if(0x34 == puTest[0])
{
return 0; //小端对齐
}
else
{
return -1; //错误
}
}
从0x00000000开始到0xffffffff(也许你的内存没这么大).
那么对于小端(Little-Endain)来说,数据0x12345678在内存中的映像就是这个样子的:
________
78 0x00000000
56 0x00000001
34 0x00000002
12 0x00000003
也就是说小端是低位数据放在低地址,像i386(x86)就是这种处理器.
而大端正好相反:
________
12 0x00000000
34 0x00000001
56 0x00000002
78 0x00000003
也就是说大端是低位数据放在低地址,像SuperH4就是这种处理器.
测试大小端代码:
void main()
{
int IsBigLitEnd(void);
int a;
a = IsBigLitEnd();
if(1==a)
{
printf("当前系统为大端对齐!/n");
}
else if(0 == a)
{
printf("当前系统为小端对齐!/n");
}
else
{
printf("出错!/n");
}
}
int IsBigLitEnd(void)
{
int wTest = 0x1234;
char* puTest = (char*)&wTest;
if (0x12 == puTest[0])
{
return 1; //大端对齐
}
else if(0x34 == puTest[0])
{
return 0; //小端对齐
}
else
{
return -1; //错误
}
}
相关文章推荐
- C语言 - 大小端问题
- 用C语言测试计算机大小端问题
- c语言中的大小端问题与高低位问题
- C语言大小端问题剖析
- c语言 之大端小端存储问题
- c语言大小端问题
- 详解C语言判断系统的大小端问题
- C语言之大小端问题
- c语言中大小端的问题
- c语言,java类型转换时遇到的大小端问题
- 蓝桥杯——派遣敢死队问题—C语言
- c语言指针运行出现问题
- 用C语言解决迷宫问题
- C语言二维数组的指针及首地址问题
- 关于C语言指针的问题
- 日历的问题C语言,C++(boost),python,Javascript,Java和Matlab实现
- 小议大小端模式对C语言的共用体结构的影响
- C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
- 【C语言】 杀人凶手问题
- 数据结构 c语言 循环队列实现扑克牌问题