存储的大小端问题

来源:互联网 发布:java求n的阶乘for循环 编辑:程序博客网 时间:2024/05/18 01:01

对于存储器的大小端问题困扰了自己很久了,所以查阅了相关的资料对其有了一定的了解,所以写了这篇博客做下简单的总结。

对于内存,我在这就不给予解释了,相信网上有很多相关的文章,现在让我们进入正题吧!

数据在内存中的存储是以字节(8位)的形式存储的,即每个内存地址只能存放8位的数据,现在我先给出大小端在概念上的意思:

小端:数据的低位放在内存地址的低位,数据的高位放在内存地址的高位,和我们正常的逻辑的理解下是一样的。

大端:数据的低位放在内存地址的高位,数据的高位放在内存地址的低位。和我们正常的逻辑的理解恰好相反的。

        代码示例解释:

#include<stdio.h>int main(int argc,char **argv){
<span style="white-space:pre"></span>unsigned int value = 0x12345678;//8个字节
<span style="white-space:pre"></span>char b = *(char *)&valu;
<span style="white-space:pre"></span>printf("b=%x\n",b);<span style="white-space:pre"></span>}

linux平台下(x86,小端)代码的执行结果:b=0x78;

        从这段代码就可以看出,该平台下数据的低位放在内存地址的低位,如果还是不理解的话,就把value的内存地址打印出来。

       

常见CPU的大小端模式:

大端:PowerPC、IBM、Sun

小端:x86

         ARM即可以工作在大端模式下,也可以工作在小端模式,通常是在小端模式。

       另外需要补充的一点是:所有的网络协议使用的是大端模式。

1 0
原创粉丝点击