大端和小端
大小端的这个名词最早出现在《格列佛游记》中,里边记载了两个征战的强国,你不会想到的是,他们打仗竟然和剥鸡蛋的顺序有关。很多人认为,剥鸡蛋时应该打破鸡蛋较大的一端,这群人被称作 “大端(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
来源: 爱编程的大丙