cpu字节序(整理)
来源:互联网 发布:淘宝推广赚佣金 编辑:程序博客网 时间:2024/05/18 01:43
字节序不是由操作系统决定的,而是由cpu架构决定的。
CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示。目前市面上的CPU指令集分类主要分有两大阵营,一个是intel、AMD为首的复杂指令集CPU,另一个是以IBM、ARM为首的精简指令集CPU。两个不同品牌的CPU,其产品的架构也不相同,例如,Intel、AMD的CPU是X86架构的,而IBM公司的CPU是PowerPC架构,ARM公司是ARM架构(大端和小端都支持,默认是小端模式)。其中PowerPC系列采用bigendian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是bigendian,什么又是little endian呢?
CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示。目前市面上的CPU指令集分类主要分有两大阵营,一个是intel、AMD为首的复杂指令集CPU,另一个是以IBM、ARM为首的精简指令集CPU。两个不同品牌的CPU,其产品的架构也不相同,例如,Intel、AMD的CPU是X86架构的,而IBM公司的CPU是PowerPC架构,ARM公司是ARM架构(大端和小端都支持,默认是小端模式)。其中PowerPC系列采用bigendian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是bigendian,什么又是little endian呢?
字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。基于X86平台的PC机是小端字节序的,而有的嵌入式平台则是大端字节序的。因而对int、uint16、uint32等多于1字节类型的数据,在这些嵌入式平台上应该变换其存储顺序。通常我们认为,在空中传输的字节的顺序即网络字节序为标准顺序,考虑到与协议的一致以及与同类其它平台产品的互通,在程序中发数据包时,将主机字节序转换为网络字节序,收数据包处将网络字节序转换为主机字节序。
Big Endian
Little Endian
测试大小端一般使用union的特性。union是一个联合体,所有变量公用一块内存,只是在不同的时候解释不同。其在内存中存储是按最长的那个变量所需要的位数来开辟内存的。
代码如下:
#include <iostream> using namespace std; union { int number; char s; }test; bool testBigEndin() { test.number=0x01000002; return (test.s==0x01); } void main() { if (testBigEndin()) cout<<"big"<<endl; else cout<<"small"<<endl; }
0 0
- cpu字节序(整理)
- CPU端序(字节序)
- CPU字节序
- 测试CPU字节序,Chack CPU endian
- [注意]有关CPU字节序
- 字节序/CPU大小端
- 判断Cpu的字节序
- 整理网络字节序
- 字节序整理
- 计算cpu是大字节序还是小字节序
- 大端字节序、小端字节序cpu判断代码
- CPU寄存器(转载+整理)
- 一个判断CPU字节序的函数
- CPU大小端字节序的检测
- CPU访问字节对齐
- 字节对齐详解(整理总结)
- 判断CPU是大端字节序还是小端字节序
- 如何确定CPU是大端字节序还是小端字节序?
- (一) linux内核基础
- MySQL安装目录缺少data文件夹解决方法
- hadoop常用命令
- The JSP specification requires that an attribute name is preceded by whitespace
- Android::开放root权限
- cpu字节序(整理)
- 通俗易懂地解释一下C#中的事件和委托
- 表自身关联查询sql语句
- TextView属性详解
- 使用scanf出现的问题
- Adobe ColdFusion < 11 Update 10 - XML External Entity Injection
- 解决MainActivity.onCreate(Unknown Source)的混淆错误
- 【noip 2014】 解方程 tyvj 4059
- 简述网络协议