[牛人杂谈] 大小端测试的方法

[复制链接]
717|7
 楼主| zhuotuzi 发表于 2020-2-25 20:10 | 显示全部楼层 |阅读模式
  1. #include"stdio.h"
  2. typedef struct
  3. {
  4.         unsigned char b:4;
  5.         unsigned char c:4;
  6. }tow;

  7. typedef union TWO
  8. {
  9. unsigned char a;
  10. tow yy;
  11. };
  12. void main(void)
  13. {
  14.         union TWO xx;
  15.         xx.a=0x35;
  16.         printf("b=%d\n",xx.yy.b);
  17.         printf("c=%d\n",xx.yy.c);       
  18.         while(1);
  19. }

474475e550e8a1674a.png
 楼主| zhuotuzi 发表于 2020-2-25 20:13 | 显示全部楼层
结构体中是两个4BIT,那么总体站位是8BIT,一个字节,联合体与一个字节并列内存,所以两个4BIT分别占用了地址的低4位和高四位。

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
 楼主| zhuotuzi 发表于 2020-2-25 20:14 | 显示全部楼层
根据这个定义应该是小端模式。
 楼主| zhuotuzi 发表于 2020-2-25 20:15 | 显示全部楼层
低地址数据在前。
幸福小强 发表于 2020-2-25 21:37 | 显示全部楼层
方法新奇,有没有一劳永逸的方法。
幸福小强 发表于 2020-2-25 21:47 | 显示全部楼层
这个方法是不对的,应该是小端,不是看位,而是看字节与字的关系。
幸福小强 发表于 2020-2-25 21:47 | 显示全部楼层
  1. #include"stdio.h"
  2. typedef struct
  3. {
  4.         unsigned char b;
  5.         unsigned char c;
  6. }tow;

  7. typedef union TWO
  8. {
  9. unsigned int a;
  10. tow yy;
  11. };
  12. void main(void)
  13. {
  14.         union TWO xx;

  15.         xx.a=0x3521;

  16.        
  17.         while(1);
  18. }

幸福小强 发表于 2020-2-25 21:48 | 显示全部楼层
237155e552588b1324.png
放在前面的低地址存放了高字节的内容。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

214

主题

3375

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部