CPU大小端字节序的检测

2024-09-07 12:08
文章标签 大小 检测 cpu 字节

本文主要是介绍CPU大小端字节序的检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


    机器的字节序有两种,即大端字节序和小端字节序。
大端字节序:在内存中,低地址存放数据的 高位,高地址存放数据的 低位
小端字节序:在内存中,低地址存放数据的 低位,高地址存放数据的 高位
如例:定义数据  a = 0x01020304
小端方式:01 02 03 04
大端方式:04 03 02 01
那么如何判断呢,方式如下-->
一、 指针方式
代码如下:
说明:在此我定义了一个全局变量a,方便与用objdump工具查看程序数据段的存储
如上,定义了一个整形的32位宽的变量 a , 然后用字符型指针强转后解引用并打印出值。整形是占4个字节的,若转成字符型必定会丢失数据,因内存中数据是顺序存储的,所以强转后解引用会取出低一个字节的数据,由此我们可以根据那一个字节的数据来判断到底是大端字节序还是小端。
如上程序,运行一下,如果打印的结果是4的话表明是小端字节序,是 1 的话表示是大端字节序
运行程序,结果如下:
打印结果为4,表明我机器的CPU的字节序为小端模式
下面,用 objdump 工具来验证一下,中断中敲命令,后跟程序的可执行文件
因为我定义的是全局变量,所以查找数据段的内容。在此要用到一个数据,就是我打印的变量 a 的地址,上图:
如上图,a的地址是804a014 ,根据此地址找到基地址 804a00c , 向右偏移8个字节后就是变量 a 的地址, 如红线所示,存储顺序为04030201, 表明是小端字节序。

二、联合体方式
    代码如下:
如上图,欲知此程序的运行结果,我们还需要了解联合体的特性。
联合体也叫做共用体,即它不同与结构体,它只有一片内存,而且片内存区域是联合体中的所有成员所共享,且它的大小为联合体中最大的那个成员所占的空间,如上图,则它的内存为4个字节。
由于我们先给 a 赋值,则内存中存放的数据应为 0x00 00 00 01 , 档用字符型的b变量从共享内存中取数据时只能取得低字节的数据, 即 01 。
在此,如果是小端字节序的话,那么它取得的数据应该是01,如果是大端字节序的话,那么取得的数据应该是 00. 运行程序,结果如下:
如上图,结果为1, 为小端字节序。

这篇关于CPU大小端字节序的检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145017

相关文章

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴