大端小端模式详解

一、 什么是大端和小端:

大端模式:数据的低字节保存在内存的高地址中,而数据的高字节,保存在内存的低地址中。

小端模式:数据的低字节保存在内存的低地址中,而数据的高字节保存在内存的高地址中。

例如数据0XABCD


        首先明白一点:在内存中数据的写入、存储肯定是从低地址到高地址,大小端只是对于高于1字节的数据的低字节和高字节CPU将以何种顺序写入到内存中。

大端模式和书写顺序相同,小端模式与书写顺序相反。

 

二、更好的翻译

        大端模式的英文是(Big-Endian)小端模式为(Little-Endian),大小端是从英文直译过来,但是经常看见外国的文章称此为High-Endian和Low-Endian,这样翻译成高尾端和低尾端可能更好些。此时的尾指数据书写顺序的尾巴,上例中就是CD,低尾端,就是尾巴在低地址处,这样更好理解些。

 

三、为什么会有大小端?

        为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。

 

四、哪些CPU是大端模式、小端模式?

        目前Intel80x86系列芯片是唯一还在坚持使用小端的芯片,而MIPSARM等芯片要么采用全部大端的方式储存,要么提供选项支持大端——可以在大小端之间切换。另外,对于大小端的处理也和编译器的实现有关,在C语言中,默认是小端(但在一些对于单片机的实现中却是基于大端,比如Keil 51C),Java是平台无关的,默认是大端。在网络上传输数据普遍采用的都是大端。

五、大端小端模式对我们编程有哪些影响?

        其实主要的影响在于采用不同模式的机器之间传输数据问题,也就是体现在网络传输中。所以在网络编程中一个很重要的一步就是大小端模式的处理,但是对于很多语言的网络类库中,已经帮我们封装好这部分内容,让我们无需关心。

        这个问题也是为什么UTF8编码在网络传输中普及率之高的原因,因为对于这种以一个字节为单位处理的编码方式,无需关心大小端模式。

 

六、如何判断自己的机器是大端模式还是小端模式

下面这段C语言代码可以用来测试一下你的编译器是大端模式还是小端模式:

#include<stdio.h>
int main()
{
         intdata = 1 ;                                //1的16进制0x00000001
         char*p = (char *)&data ;         //强制转化为char*类型指针,指向数据首字节地址,也就是地址值
         if(*p== 0)
                   printf(“大端模式”);
         else
                   printf(“小端模式”);
         return0 ;
}

部分文字参考自:http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857/
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值