大端小端模式及其判别方式

Little endian 和Big endian 是CPU 存放数据的两种不同顺序。

对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放数据的低位字节到高位字节)。
例如,假设从内存地址0x0000 开始有以下数据:
0x12 0x34 0xab 0xcd
如 果我们去读取一个地址为0x0000 的四个字节变量,若字节序为big-endian,则读出结果为0x1234abcd;若字节序位little-endian,则读出结果为 0xcdab3412。如果我们将0x1234abcd 写入到以0x0000 开始的内存中,则Little endian 和Big endian 模式的存放结果如下:
地址               0x0000 0x0001 0x0002 0x0003
big-endian         0x12   0x34   0xab   0xcd
little-endian        0xcd   0xab   0x34   0x12

一般来说,x86 系列CPU 都是little-endian 的字节序,PowerPC 通常是Big endian,还有的CPU 能通过跳线来设置CPU 工作于Little endian 还是Big endian 模式。

具体判断方式代码如下:

#include <stdio.h>
#include <stdlib.h>

int big_or_little_endian()
{
	union data
	{
		int a;
		char b;
	}data;
	data.a = 1;
	return ( data.b==1 );
	/*
	联合体中每次只有一个变量赋值,且其他值被赋值为同样的值,所有数据都是从低地址开始存储.
	因为int型数据存储地址范围比char型数据大,所以当int型数据存储到char中会被截断。
	1 = 0x 00 00 00 01;若是小端模式,则低字节01存放到char中去,结果为1,返回值为1,小端模式;
	若是大端模式,则高字节00存放到char中去,结果为0,返回值为0,大端模式。	  
	*/
}
int main()
{
	if( big_or_little_endian() )
		printf("小端模式\n");
	else
		printf("大端模式\n");	
	return 0;
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值