当前位置: 首页 > news >正文

如何判断主机字节序

测试代码:

#include <stdio.h>
void byteorder()
{union{short value;char union_bytes[sizeof(short)];//union_bytes数组}test;test.value = 0x0102;if((test.union_bytes[0] == 1) && (test.union_bytes[1]==2)){printf("big endian\n");}else if((test.union_bytes[0] == 2) && (test.union_bytes[1]==1)){printf("little endian\n");}else{printf("unknow...\n");}
}int main()
{byteorder();return 0;
}

分析:

在给定的代码中,定义了一个联合体test,其中包含一个short类型的成员value和一个字符数组union_bytes,该数组的大小为sizeof(short)

假设在一个小端字节序的系统中(常见的 x86 和 x86-64 架构通常是小端字节序):

  1. 首先给test.value赋值为0x0102

    • 由于是小端字节序,内存中存储的顺序是先低字节后高字节。
    • 如果short类型占用 2 个字节,那么内存中的分布为低地址存储0x02,高地址存储0x01
  2. 对于union_bytes数组:

    • 因为联合体的成员共享同一块内存空间,所以union_bytes数组的内存分布与value相同。
    • union_bytes[0]对应低地址,存储的值为0x02union_bytes[1]对应高地址,存储的值为0x01

如果是在大端字节序的系统中:

  1. test.value赋值为0x0102后,内存中存储的顺序是先高字节后低字节。

    • 高地址存储0x01,低地址存储0x02
  2. 对于union_bytes数组:

    • union_bytes[0]对应低地址,存储的值为0x01union_bytes[1]对应高地址,存储的值为0x02


http://www.mrgr.cn/news/39595.html

相关文章:

  • Brave编译指南2024 MacOS篇-构建与运行(六)
  • C++ 游戏开发:奠定高性能游戏的基础
  • springboot+养老院管理系统—计算机毕业设计源码36270
  • 【TypeScript学习】TypeScript基础学习总结一
  • 独孤思维:新项目刚出单就退款了
  • MQTTnet.Extensions.ManagedClient客户端连接
  • 带有controller的自定义组件——列表勾选删除
  • Python 中的lambda函数表达式
  • tomcat的server.xml文件在什么地方?
  • Android资源翻译工具教程
  • Arch Linux 与 Valve 建立直接合作关系
  • 5. 常用开源数据集快速导入Linux服务器(AutoDL)——深度学习·科研实践·从0到1
  • springboot电影售票系统小程序—计算机毕业设计源码36991
  • 在 C++ std::set 中如何利用不同类型的值进行搜索?
  • 1111111
  • 【mmengine】注册器(register) (进阶)继承mmengine注册器来实现自己项目的注册器
  • QMT和PTrade哪个更适合初学者
  • Java中Arrays的用法
  • 清晰视界,触手可及:蔡司智锐镜片引领视觉新风尚
  • 【多线程奇妙屋】能把进程和线程讲的这么透彻的,没有20年功夫还真不行【0基础也能看懂】