理解字节序:大端模式、小端模式
来源:互联网 发布:win8.1配置java环境 编辑:程序博客网 时间:2024/05/19 22:56
一、字节序
字节序是什么,看书是一点用也没有的,看不明白到底是为什么。
我始终坚持一个观点:实践是检验真理的唯一标准。
下面,就是我的实践过程。使用C/C++语言。
(1)内存地址,最小单位是字节。仅仅看单次的内存分配,都是首地址的数值最小,后续的不断增长。
(2)单个字节 = 8位,例如:11110000
(3)考虑占4个字节的int型,要怎么表达?因为需要4个字节: [ 1号 ][ 2号 ][ 3号 ][ 4号 ]
此时,问题来了,就是例如 int x = 0x12345678,
这种4个字节的数,12,34,56,78,这4个字节要怎么排序?
假设左边是int x的首地址,
如果这么排序: [12] [34] [56] [78] ,就是大端模式。
如果这么排序: [78] [56] [34] [12] ,就是小端模式。
(4)下面,用VS2013作为工具,进行调试。(windows系统,默认是小端模式)
代码如下图1所示:
图1
从图1中,可以明显的看到一件事情。就是分配内存的时候,首地址的数值是最小的,分配的时候依次增大,内存地址的单位是字节。VS2013的调试模式,以16进制显示内存地址。
很明显 x 的地址是:0x00CFFF18
数字78的地址:0x00CFFF18
数字56的地址:0x00CFFF19
数字34的地址:0x00CFFF1A
数字12的地址:0x00CFFF1B
到这里,我想大家应该都明白了,内存地址的值的分配是从小到大增长的。也明白了什么是大端,什么是小端。
二、再给一例子
如下图2所示。
图2
理解的关键点:
1.理解内存地址是一个数值
2.内存地址的最小单位是:字节
3.内存地址的分配,是从小到大增长的
4.16进制数字和字节的对应关系:
例如 0x12 是一个字节, 0x36AD是两个字节, 0xABCD1234是四个字节。
因为 (一个字节) = (8位)=(0~255),而( 0x00~0xFF) = ( 0~255)
三、写一个函数,区分大端和小端
要求:如果是小端就返回1,是大端就返回0
int check(void) { union { int a; char b; }c; c.a = 1; return (c.b == 1); }
应该很好理解!
==================================
- 理解字节序:大端模式、小端模式
- 大端模式、小端模式与网络字节序
- 网络字节序、大端模式、小端模式
- 字节序--大端模式和小端模式
- 大端模式小端模式以及网络字节序
- 理解大端模式和小端模式
- 网络字节序、大端和小端模式
- 大端模式与小端模式 网络字节序与主机字节序
- 字节顺序:大端模式 和 小端模式
- 大端模式,小端模式,字节对齐 about C
- 结合Union谈大端模式,小端模式,网络字节
- 大端模式、小端模式和网络字节顺序【转】
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式 .
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信时字节序转换原理与网络字节序、大端和小端模式
- 网络通信之 字节序转换原理与网络字节序、大端和小端模式
- fastjson中Map与JSONObject互换,List与JOSNArray互换的实现
- 一行命令升级 node.js
- Socket编程—Client、Server通信
- .gitignore文件配置
- 急需大神指导!DevExpress为何这么火。
- 理解字节序:大端模式、小端模式
- 理解Docker容器端口映射
- 1ObjectMapper、SimpleModule、JsonNode三个类解释 2ObjectMapper类的writeValueAsString、valueToTree、readTree等方法
- Velocity 模板语法
- 【备注】【C18】《名家讲坛-JAVA开发实战经典》 PDF 下载
- 4-1 Topological Sort (9分)
- linux的目录以及作用
- HDU 1016 Prime Ring Problem
- 为RecyclerView打造通用Adapter 让RecyclerView更加好用