博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存存储 -- 大小端问题
阅读量:3956 次
发布时间:2019-05-24

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

大端和小端

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

你可能感兴趣的文章
STL里的multimap使用详解
查看>>
STL 库其中的 std::string用法总结
查看>>
模态对话框的销毁过程与非模态对话的几种销毁方法
查看>>
C++实现http下载 && 24点计算编码风格
查看>>
memcached了解使用和常用命令详解
查看>>
GDB调试各功能总结
查看>>
"undefined reference to" 多种可能出现的问题解决方法
查看>>
类结构定义
查看>>
Windows下关于多线程类 CSemaphore,CMutex,CCriticalSection,CEvent,信号量CSemaphore的使用介绍
查看>>
图像处理基本算法(汇总)以及实现
查看>>
C++编程获取本机网卡信息 本机IP 包括Windows和Linux
查看>>
23种设计模式详解及C++实现
查看>>
C++连接CTP接口实现简单量化交易
查看>>
服务端使用c++实现websocket协议解析及通信
查看>>
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>
Linux用户及用户组添加和删除操作
查看>>
通用 Makefile 的编写方法以及多目录 makefile 写法
查看>>
C++的4种智能指针剖析使用
查看>>
RPC框架实现之容灾策略
查看>>