cpu的大端模式小端模式优劣对比.doc

上传人:白大夫 文档编号:3250731 上传时间:2019-08-06 格式:DOC 页数:2 大小:15.50KB
返回 下载 相关 举报
cpu的大端模式小端模式优劣对比.doc_第1页
第1页 / 共2页
亲,该文档总共2页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《cpu的大端模式小端模式优劣对比.doc》由会员分享,可在线阅读,更多相关《cpu的大端模式小端模式优劣对比.doc(2页珍藏版)》请在三一文库上搜索。

1、cpu的大端模式小端模式优劣对比一、大端模式和小端模式的起源二、什么是大端和小端 Big-Endian和Little-Endian的定义如下:1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:2)小端模式:3)下面是两个具体例子:4)大端小端没有谁优谁劣,各自优势便是对方劣势:三、数组在大端小端情况下的存储:以unsigned int value = 0x12345678为例,分别看看在两种字

2、节序下其存储情况,我们可以用unsigned char buf4来表示value:Big-Endian: 低地址存放高位,如下:高地址 - buf3 (0x78) - 低位 buf2 (0x56) buf1 (0x34) buf0 (0x12) - 高位 - 低地址Little-Endian: 低地址存放低位,如下:高地址 - buf3 (0x12) - 高位 buf2 (0x34) buf1 (0x56) buf0 (0x78) - 低位 -低地址四、为什么会有大小端模式之分呢? 这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除

3、了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于五、如何判断机器的字节序可以编写一个小的BOOLIsBigEndian()inta=0x1234;charb=*(char*)/通过将int强制类型转换成char单字节,通过判断起始存储位置。即等于取b等于a的低地址部分if(b=0x12)returnTRUE;returnFALSE;BOOLIsBigEndian()unionNUMinta;charb;num;num.a=0x1234;if(num.b=0x12)returnT

4、RUE;returnFALSE;六、常见的字节序一般操作系统都是小端,而通讯协议是大端的。4.1 常见CPU的字节序Big Endian : PowerPC、IBM、SunLittle Endian : x86、DECARM既可以工作在大端模式,也可以工作在小端模式。4.2 常见文件的字节序Adobe PS Big EndianBMP Little EndianDXF(七、如何进行转换对于字数据(16位):#defineBigtoLittle16(A)(uint16)(A)(_u16)(_u16)(_x)#define_swab32(x)_u32_x=(x);(_u32)(_u32)(_x)九

5、、从系统的角度理解端模式先补充两个关键词,MSB和LSB:MSB:MoST Significant Bit - 最高有效位 LSB:Least Significant Bit - 最低有效位十、实际中的例子 虽然很多时候,字节序的工作已由编译器完成了,但是在一些小的细节上,仍然需要去仔细揣摩考虑,尤其是在以太网通讯、MODBUS通讯、软件移植性方面。这里,举一个MODBUS通讯的例子。在MODBUS中,数据需要组织成数据报文,该报文中的数据都是大端模式,即低地址存高位,高地址存低位。假设有一16位缓冲区m_RegMW256,因为是在x86平台上,所以内存中的数据为小端模式:m_RegMW0.low、m_RegMW0.high、m_RegMW1.low、m_RegMW1.high为了方便讨论,假设m_RegMW0 = 0x3456; 在内存中为0x56、0x34。 现要将该数据发出,如果不进行数据转换直接发送,此时发送的数据为0x56,0x34。而Modbus是大端的,会将该数据解释为0x5634而非原数据0x3456,此时就会发生灾难性的错误。所以,在此之前,需要将小端数据转换成大端的,即进行高字节和低字节的交换,此时可以调用步骤五中的函数BigtoLittle16(m_RegMW0),之后再进行发送才可以得到正确的数据。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1