CPU中的Little Endian与Big Endian
来源:互联网 发布:图片收费网站源码 编辑:程序博客网 时间:2024/05/22 16:57
CPU中的Little Endian与Big Endian
今天在学习利用buildroot编译软件包的时候,make menuconfig
之后在Target Architecture
选项中发现了同一种CPU架构中有两个不同的选项,分别是little endian
和big endian
,如下图:
在好奇心的驱使下我就必应了一下,原来是不同CPU存储字节的顺序不同。
Little Endian与Big Endian简介
在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian,引用标准的Big-Endian和Little-Endian的定义如下:
- Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
- Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
- 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。
比如int a = 0x05060708
在BIG-ENDIAN
的情况下存放为:
在LITTLE-ENDIAN
的情况下存放为:
通常来说,x86 cpu是Little-Endian。而一般ARM CPU也是Little-Endian。但是当前常见的开发板使用的处理器比如S3C2410A、S3C2440等都是大小端支持的,可以通过软件选择。
Little Endian与Big Endian判断方法
那么如何用程序看当前设备是什么字节序呢?
很多人的做法是使用一个指针:1
int x = 1; if(*(char *)&x == 1) //截取int型数据x的低八位,通过判断其是否为1来确定其数据的存储方式 printf("little-endian\n"); else printf("big-endian\n");
或者共用体,因为在C语言中,联合体union的存放顺序是所有成员都从低地址开始存放的。利用这一特点,可以用联合体变量判断ARM或x86环境下,存储系统是是大端还是小端模式。2
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");
祝枫
2016年7月13日于深圳
参考文献
- http://blog.csdn.net/lincyang/article/details/17266027 ↩
- http://blog.csdn.net/leoliu0128/article/details/6043910 ↩
0 0
- CPU中的Little Endian与Big Endian
- Big Endian 与 Little Endian
- big endian与little endian
- Big-endian 与 Little-endian
- Big Endian 与 Little Endian
- Big endian 与 Little endian
- Big endian 与 Little endian
- little-endian与big-endian
- Little endian & Big endian
- big-Endian&little-Endian
- big-Endian&little-Endian
- big-Endian&little-Endian
- little endian && big-endian
- Big endian & Little endian
- big-endian/little-endian
- Big endian Little endian
- Big-endian & Little-endian
- Little-endian & Big-endian
- jsp include 参数混乱,获取到请求主页面的参数了,清空request parameter
- EL表达式详解
- 火蔓延的迷宫
- Axure实现QQ个性签名
- Android Camera HAL3中预览preview模式下的数据流
- CPU中的Little Endian与Big Endian
- 微信hit push hold !!
- 黑马程序员_Java基础_我的Day25学习笔记
- 元素不可用的三种样式
- Android Camera API2中采用CameraMetadata用于从APP到HAL的参数交互
- SQL中distinct的用法
- 滑块验证码识别源码
- (git入门 git常用命令)自己在公司的Git总结,以及找到的图,和入门须知的git命令
- Xcode 自定义代码片段——提高编码效率