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

C语言中如何判断大小端字节序?

大小端(Endian)是指多字节整数在内存中存储的方式。在计算机中,一个多字节整数由多个字节组成,而不同的机器和处理器在存储多字节整数时会有两种不同存储方式,分别为大端字节序和小端字节序。

以一个4字节整数0x12345678为例,在大端字节序中存储为12 34 56 78,在小端字节序中存储为78 56 34 12。大端字节序是指在内存中较高的地址保存数值的低位字节,而较低的地址保存数值的高位字节;小端字节序则相反,在内存中较高的地址保存数值的高位字节,而较低的地址保存数值的低位字节。

C语言中对于大小端字节序,一般使用联合体来判断。如下:

#include <stdio.h>int main()
{union {short s;char c[sizeof(short)];} un;un.s = 0x0102;if (sizeof(short) == 2) {if (un.c[0] == 1 && un.c[1] == 2)printf("big-endian\n");else if (un.c[0] == 2 && un.c[1] == 1)printf("little-endian\n");elseprintf("unknown\n");}else {printf("sizeof(short) = %d\n", sizeof(short));}return 0;
}

上述代码中,联合体的大小等于short的大小,可以通过访问其低位字节和高位字节的方式来判断是大端字节序还是小端字节序。如果联合体的低地址保存的是s的高位字节,那就表明该机器是小端字节序。

大端和小端的区分方式在所有字节正序列出来后表现是完全相反的(即在大端字节序中,先写的字节的地址编号越大;而在小端字节序中,先写的字节的地址编号越小),因此只需将一个数的二进制表示按字节分割后列出来,即可判断其是否为大端字节序或小端字节序。

假设某个整数在内存中按照如下方式存储:

十六进制表示: 12 34 56 78
二进制表示: 00010010 00110100 01010110 01111000

根据这个数字的存储方式可以判断出这个系统是大端还是小端,以下是两种方式的比较:

  • 大端字节序:低地址存放高位字节,高地址存放低位字节
内存地址存放数据
0x10000x12
0x10010x34
0x10020x56
0x10030x78
  • 小端字节序:低地址存放低位字节,高地址存放高位字节
内存地址存放数据
0x10000x78
0x10010x56
0x10020x34
0x10030x12

这里假设内存中存储的数值是0x12345678,通过在内存中查看数值的存储方式可以发现,在大端字节序中,最高位字节的数值存储在最低地址的位置上,即0x12存储在了0x1000的位置;而在小端字节序中,最高位字节的数值存储在最高地址的位置上,即0x12存储在了0x1003的位置上。

http://www.lryc.cn/news/60739.html

相关文章:

  • 用spring-boot-starter实现事务的统一配置
  • C语言中fopen的详细用法
  • C语言——学生信息管理系统(数组)
  • 【C语言】基础语法1:变量和数据类型
  • linux安装和使用jekins
  • 驼峰式匹配
  • 第三十七章 立方体贴图总结
  • 哈希(C++)
  • Spring MVC 的调用(12)
  • 死磕内存篇 --- JAVA进程和linux内存间的大小关系
  • 信号完整性分析:关于传输线的三十个问题解答(三)
  • Java基础:Stream流常用方法
  • ImageNet使用方法(细节)自用!
  • C/C++外观模式解析:简化复杂子系统的高效方法
  • 追梦之旅【数据结构篇】——详解小白如何使用C语言实现堆数据结构
  • cocoscreator性能优化4-Sprite颜色数据去除
  • 系统接口幂等性设计探究
  • C learning_7
  • PageRank算法介绍
  • springboot+vue职称评审管理系统(源码+文档)
  • 腾讯云4核8G轻量服务器12M支持多少访客同时在线?并发数怎么算?
  • 图片英文翻译成中文转换器-中文翻译英文软件
  • 月薪10k和40k的程序员差距有多大?
  • gateway整合knife4j(微服务在线文档)
  • ASP.NET 记录 HttpRequest HttpResponse HttpServerUtility
  • Python 人工智能:11~15
  • 辉煌优配|军工板块逆市上涨,16只概念股已披露一季度业绩预喜
  • 看板与 Scrum:有什么区别?
  • 零代码是什么?零代码平台适合谁用?
  • CNStack 云服务云组件:打造丰富的云原生技术中台生态