浅析Endian(字节序问题)

一、背景 

自Jonathan Swift的《格列夫游记》中出现大小端后,现特指数据存储顺序的分歧。正如小说中展示的荒诞情节一般,鸡蛋从大端打破和小端打破其实是无关紧要的;大端模式和小端模式的形成是历史原因,我们需要理解。

1.1 本质

每个地址单元都对应1Byte。存在将多字节数据如何存放的问题。Little-endian:数据的高字节保存在内存高地址中,数据的低字节保存在内存的低地址中,该模式将地址高低和权值有效结合。Big-endian:与Little-endian相反;地址由小向大增加,数据按高位向低位存放。

1.2 应用

在网络上传输数据,因收发端硬件平台不同,存储顺序可能不同。TCP/IP协议规定在网络上必须采用大端模式,在数据发送之前将转换成大端模式。

1.3 测试方法

基于数据类型 

bool IsLittleEndian()
{
	int test = 1;
	if (*((char *)&test))
		return true;
	else
		return false;
}

基于联合体

typedef union Test		//大小占4个字节
{
	int i;
	char c;
}Test;

bool IsLittleEndian()	//利用联合体特性
{
	Test test;
	memset(&test, 0, sizeof(Test));
	test.i = 1;
	if (test.c == 1)
		return true;
	else
		return false;
}

1.4 误区

大小端主要体现在存储方式读取方式上:

  • 大端模式:低位在高地址、读取从低地址到高地址。
  • 小端模式:低位在低地址、读取从高地址到低地址。

二、参考文献

【1】深入浅出大小端模式

【2】如何测试电脑大小端

【3】测试机器大小端的方法

【4】大小端模式的有关习题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值