存储的大小端问题
2016-03-18 13:56
281 查看
对于存储器的大小端问题困扰了自己很久了,所以查阅了相关的资料对其有了一定的了解,所以写了这篇博客做下简单的总结。
对于内存,我在这就不给予解释了,相信网上有很多相关的文章,现在让我们进入正题吧!
数据在内存中的存储是以字节(8位)的形式存储的,即每个内存地址只能存放8位的数据,现在我先给出大小端在概念上的意思:
小端:数据的低位放在内存地址的低位,数据的高位放在内存地址的高位,和我们正常的逻辑的理解下是一样的。
大端:数据的低位放在内存地址的高位,数据的高位放在内存地址的低位。和我们正常的逻辑的理解恰好相反的。
代码示例解释:
#include<stdio.h>
int main(int argc,char **argv)
{
linux平台下(x86,小端)代码的执行结果:b=0x78;
从这段代码就可以看出,该平台下数据的低位放在内存地址的低位,如果还是不理解的话,就把value的内存地址打印出来。
常见CPU的大小端模式:
大端:PowerPC、IBM、Sun
小端:x86
ARM即可以工作在大端模式下,也可以工作在小端模式,通常是在小端模式。
另外需要补充的一点是:所有的网络协议使用的是大端模式。
对于内存,我在这就不给予解释了,相信网上有很多相关的文章,现在让我们进入正题吧!
数据在内存中的存储是以字节(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即可以工作在大端模式下,也可以工作在小端模式,通常是在小端模式。
另外需要补充的一点是:所有的网络协议使用的是大端模式。
相关文章推荐
- #新闻拍一拍# IBM 招聘广告要求应聘者具备至少 12 年 K8S 使用经验
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程