欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > c/c >内容正文

c/c

c/c 之大端模式和小端模式 -凯发k8官方网

发布时间:2024/10/14 c/c 20 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 c/c 之大端模式和小端模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

byte endian是指字节在内存中的组织,所以也称它为byte ordering或byte order。对于数据中跨越多个字节的对象, 我们必须为它建立这样的约定:

(1) 它的地址是多少?

(2) 它的字节在内存中是如何组织的?

对于跨越多个字节的对象,一般它所占的字节都是连续的,它的地址等于它所占字节最低地址。(链表可能是个例外, 但链表的地址可看作链表头的地址)。比如: int x,它的地址为0×100。那么它占据了内存中的0x100, 0×101, 0×102, 0×103这四个字节(32位系统,int占用4个字节)。

上面只是内存字节组织的一种情况,多字节对象在内存中的组织一般有两种约定。 例如一个w位的整数,它的各位表达如下:[xw-1, xw-2, ... , x1, x0],它的msb(most significant byte)为 [xw-1, xw-2, ... xw-8];lsb (least significant byte)为 [x7,x6,..., x0]。lsb和msb谁位于内存的最低地址,即谁代表该对象的地址,这就引出了大端(big endian)与小端(little endian)的问题

32位宽的数0x12345678在小端模式cpu内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址

0x4000

0x4001

0x4002

0x4003

存放内容

0x78

0x56

0x34

0x12

而在大端模式cpu内存中的存放方式则为:

内存地址

0x4000

0x4001

0x4002

0x4003

存放内容

0x12

0x34

0x56

0x78

首先我们要知道一点,内存地址是从小到大顺序增长的。因此,如果定义一个变量,变量的地址就是0x4000。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。下面通过程序判断大小端

联合体测试大端小端

使用指针强制转换

与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是凯发k8官方网为你收集整理的c/c 之大端模式和小端模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图