大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地此链址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增数芦加,而数据从高位往低位放;
小森毕孙端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
测试程序:
#include<stdio.h>int main(void)
{
int a = 0x12345678
unsigned char *p=(unsigned char *)&a
if(0x78 == *p)
{
printf("little end\n")
}
else
{
printf("big end\n")
}
return 0
}
#include <stdio.h>union utype
{
局戚碰int i
char a
}
void main()
{
union 仔巧utype u
u.i = 1
if (u.a)
桐谈printf("小端\n")
else
printf("大端\n")
}
这个关键是判断第一个字节的内容比较而来。和书写顺序一致就是大端,不书写顺序不一致就是小端,随便写了一个小测试腊帆圆程序,源码如下:
#include <cstdio>char endian()
{
int i = 0x423f3f4C//i存储了4个字符轿握,B??L
return *(char *)&i
}
int main(int ac,char **pav)
{
char ch = endian()
if (ch=='L') printf("little endian!\n")
else if (ch=='B') printf("big endian!\n")
else if (ch=='?') printf("unknow endian!\n")
return 0
}
执行效果如下图轮塌所示:
如果是考虑可移植性之类的,你完全可以使用
unsigned char endian(){int i = ~0 - 1return *(unsigned char *)(&i)}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)