博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大端 VS 小端
阅读量:6294 次
发布时间:2019-06-22

本文共 1236 字,大约阅读时间需要 4 分钟。

hot3.png

Big-Endian和Little-Endian的定义如下:

a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。[低地址放低字节]

b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。[低地址放高字节]
c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

1.1 什么是高/低地址端

首先我们要知道C程序映像中内存的空间布局情况:在《C专 家编程》中或者《Unix环境高级编程》中有关于内存空间布局情况的说明,大致如下图:
----------------------- 最高内存地址 0xffffffff
栈底
栈顶
-----------------------
NULL (空洞)
-----------------------
-----------------------
未初始 化的数据
----------------------- 统称数据段
初始化的数据
-----------------------
正 文段(代码段)

----------------------- 最低内存地址 0x00000000

由图可以看出,再内存分布中,栈是向下增长的,而堆是向上增长的。
以上图为例如果我们在栈 上分配一个unsigned char buf[4],那么这个数组变量在栈上是如何布局的呢?看下图:
栈底 (高地址)
----------
buf[3]
buf[2]
buf[1]
buf[0]
----------
栈顶 (低地址)
其实,我们可以自己在编译器里面创建一个数组,然后分别输出数组种每个元素的地址,来验证一

1.2 什么是高/低字节

 0x12345678来说,从高位到低位的字节依次是0x12、0x34、0x56和0x78

以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value:

Big-Endian: 低地址存放高位,如下图:
栈底 (高地址)
---------------
buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 高位
---------------
栈顶 (低地址)
Little-Endian: 低地址存放低位,如下图:
栈底 (高地址)
---------------
buf[3] (0x12) -- 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 低位
--------------
栈 顶 (低地址)

转载于:https://my.oschina.net/badboy2/blog/495637

你可能感兴趣的文章
物联网:从源头为生产环境安全把关
查看>>
英巴卡迪诺新年战略:支持Linux提供中文手册
查看>>
梭子鱼任命James Forbes-May为亚太区销售副总裁
查看>>
关于“大数据”的15条干货思考
查看>>
Wind River Helix系统及物联网解决方案 简化企业IOT部署
查看>>
《VMware Virtual SAN权威指南》一第1章 VSAN概述
查看>>
大数据落地决胜的关键——百分点BASIC模型
查看>>
全闪存存储时代 NVMe到底是什么?
查看>>
《数学建模:基于R》——2.2 方差分析
查看>>
大数据的发展,伴随的将是软件工程师的渐退,算法工程师的崛起
查看>>
明明是全闪存阵列,为何存储性能仍然不够快
查看>>
Cloud Foundry 登录 Azure,一键快速部署 PaaS
查看>>
Firefox 44.0将在Linux上启用H.264支持:GTK3仍缺席
查看>>
如何检测出定制服务器中预装的恶意软件?
查看>>
System x迈向更多领域 国内超算步入全面发展时代
查看>>
爱立信思科结盟背后:几家欢喜几家愁
查看>>
Linux入门时必学文件处理个命令
查看>>
模块化你的JS代码
查看>>
掌握shell应用,Linux任你行走
查看>>
【开篇】自我介绍和博客未来规划
查看>>