大端序和小端序
字节序,我们习惯上称其为端序,又称尾序, 通俗点将就是内存中存放数据的字节顺序。那么很容易想到有两种:
(1)地址存放数据的位,地址存放数据的位。这就是所谓的小端序(我习惯这样记忆: 低低 ---> 小)
(2)地址存放数据的位,地址存放数据的位。这就是所谓的大端序


看上面的文字描述或许不够直观,还容易绕晕,直接看个图示:
文章正文图片
看完上面的图,对于端序,你应该有个初步的认识了。也可以自己敲个程序看一下数据在内存中的存储情况。
如下测试代码:
#include <iostream>

using namespace std;

int main(){
    
    int a = 0x12345678;
    int *p = &a;

    return 0;
}
借助IDE,在以上代码打个断点,然后打开内存窗口,查看内存中 a 的存储形式。如下是某次运行内存中的情况【红框部分(十六进制查看)存储的就是 a 值】:
文章正文图片

自己动手操作之后你应该更加理解端序这个概念了,那么比较常见的问题是如何通过程序判断当前平台是大端序还小端序呢?理解原理了就比较简单了,只需读取并对比数据即可判断,下面给出一个简单示例:
#include <iostream>

using namespace std;

int main(){
    
    int a = 1;
    //读取 a的地址空间 的第一个字节的数据和a的低位数据作一个对比即可
    cout << ((((int)*((char*)&a)) == 1)   "小端序" : "大端序") << endl;
    
    return 0;
}

总结
大小端序是硬件层面的东西,很多人平时可能接触不到,当然了解一下还是好的,做嵌入式的话不用多说,这个是必须掌握的基本知识,以上内容只代表我个人的观点,若您在阅读过程中发现错误,欢迎留言指正。
It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门