内存存储 -- 大小端问题

大端和小端

大小端的这个名词最早出现在《格列佛游记》中,里边记载了两个征战的强国,你不会想到的是,他们打仗竟然和剥鸡蛋的顺序有关。很多人认为,剥鸡蛋时应该打破鸡蛋较大的一端,这群人被称作 “大端(Big endian)派”。可是那时皇帝儿子小时候吃鸡蛋的时候碰巧将一个手指弄破了。所以,当时的皇帝就下令剥鸡蛋必须打破鸡蛋较小的一端,违令者重罚,由此产生了 “小端(Little endian)派”。

老百姓们对这项命令极其反感,由此引发了 6 次叛乱,其中一个皇帝送了命,另一个丢了王位。据估计,先后几次有 11000 人情愿受死也不肯去打破鸡蛋较小的一端!

字节序:顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,也就是说对于单字符来说是没有字节序的问题的,字符串是单字符的集合,因此字符串也没有字节序的问题。

目前在各种计算机体系的计算机中,通常采用的自己存储机制主要是两种:Big-Endian 和 Little-Endian

Big-Endian 大端

网络字节序
数据的低位存储到内存的高位地址,数据的高位自己存储到内存的低地址位,套接字通信过程中操作的数据大都是大端存储,包括,接收、发送数据,IP地址,端口。

Little-Endian小端

主机字节序
数据的滋味字节存储到内存的低地址,数据的高位字节存储到内存的高地址位。我们使用的PC机,数据的存储模式默认使用的是小端。

例子

有一个16进制的数, 有32位 (int): 0xab5c01ff
字节序, 最小的单位: char 字节, int 有4个字节, 需要将其拆分为4份
一个字节 unsigned char, 最大值是 255(十进制) ==> ff(16进制)

             内存低地址位                内存的高地址位

小端: 0xff 0x01 0x5c 0xab
大端: 0xab 0x5c 0x01 0xff

在这里插入图片描述

转载作者: 苏丙榅
链接: https://subingwen.cn/linux/socket/#3-1-%E5%AD%97%E8%8A%82%E5%BA%8F
来源: 爱编程的大丙

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值