大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地此链址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增数芦加,而数据从高位往低位放;
小森毕孙端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
测试程序:
#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>int check()
{
union check
{
int i
char ch
}c
c.i =1
return (c.ch == 1)
}
int main()
{
int ret
ret = check()
if(ret == 0)
{
printf("Big\n")
}
else
{
printf("little\n")
}
return 0
}
联合体中 变量i 和ch共世哪用同一地址空间,它们都是从低地址开始存放。亏纯变量i的值为0x00 00 00 01, 如果是小端模式则01在低地址上,ch的值如果为01则是小端模式,否则是大端模式。销返咐
在C语言中,不同于结构体,共用体(联合体)中的几种不同类型的变量存放在同一段内存单元中。利饥基或用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式。
#include "stdio.h"int main()
{
union w
{
int a //4 bytes
char b //1 byte
} c
c.a=1
烂伍 if (c.b==1)
printf("It is Little_endian!\n")
else
锋高printf("It is Big_endian!\n")
return 1
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)