码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 大端 小端?


    前言

    这个问题也是一个困扰我很久的问题,最近看到了就决定拎出来用自己的理解讲一遍。对应CSAPP的2.1.3章 寻址和字节顺序

    我的比喻

    就是书上印满了字(计算机里存满了binary的数据,这些数据8bit为1byte地存放,就是有很多个byte,很多个字)。那么我们在读书的时候,究竟是从左往右读呢,还是从右往左读呢?

    大端法: 苹果 

    小端法: 果苹

    书上的例子

    举一个具体的例子,一个数是  0x 01 23 45 67, 放在地址0x100的地方

    地址0x1000x1010x1020x103
    大端法01234567
    小端法67452301

    最低有效字节在最前面的方式,叫小端法(little endian), 下面是一个例子

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. typedef unsigned char *byte_pointer;
    4. void show_bytes(byte_pointer a, int len) {
    5. int i;
    6. printf("len=%d\t",len);
    7. for(i=0; i<len; i++) {
    8. printf("%x ", a[i]);
    9. }
    10. printf("\n");
    11. }
    12. int main(int argv, char** argc) {
    13. int x = 12345;
    14. short mx = -x;
    15. int* p = &x;
    16. show_bytes((byte_pointer)&x, sizeof(x)); //len=4 39 30 0 0
    17. show_bytes((byte_pointer)&mx, sizeof(mx)); //len=2 c7 cf
    18. show_bytes((byte_pointer)&p, sizeof(p)); //len=8 ac ad 3d 5a fe 7f 0 0
    19. return 0;
    20. }

    上面的代码运行,我的输出是

    12345 =   39 30    # bianray = 0011 1001 |  0011 0000  

    -12345 =  c7 cf    

    这个其实是小端的输出结果,我的机器是小端:12345的binary应该是 0b 0011 0000| 0011 1001

    最好配个图

    应用

    • 反汇编器输出的十六进制 43 0b 20 00 其实是 0x 00 20 0b 43这个地址,要反过来读
    • 网络传输二进制数据,要格式一致 (我的话就是,内容就哪些,你怎么解释,要约定好)
    • 强制类型转换 show_bytes(byte_pointer x,int len), 用sizeof(xxx)来确定对象使用的字节数。需要理解的是计算机的binary不变,改变数据类型只是改变解释这些bianry, 一个例子就是 把一个有符号的负数,强制转换为无符号数, 0x1101 (-3) ,解释为无符号数是 0x1101(13)

     

    我的是64bit系统,所以地址(指针的sizeof)会为8

  • 相关阅读:
    【Spring】Spring bean定义及其作用域
    2023年10月【考试战报】|ORACLE OCP 19C考试通过
    axios学习
    AVL树插入新节点后调整的四种情况(左单旋、右单旋、双旋)
    DM数据库金融行业案例(水贴一波)
    javaWeb录入数据异常,mysql显示错误
    MySQL - 事务四大特性、事务隔离级别、事务的脏读、不可重复读、幻读
    华为OD机试真题-最大坐标值-2023年OD统一考试(C卷)--Python--开源
    【PyTorch 攻略(5/7)】训练和模型
    十大经典排序算法(java实现、配图解,附源码)
  • 原文地址:https://blog.csdn.net/Chunying27/article/details/127812272
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号