【C语言】如何判断一个机器的大小端

如何判断一个机器的大小端

  • 一:什么是机器的大小端
  • 二:为什么会有大小端
  • 三:设计一个小程序来判断当前机器的大小端
    • 方法一:指针类型强转
    • 方法二:联合体

一:什么是机器的大小端

机器的大小端是指在内存中存储多字节数据时的字节顺序。在一个多字节数据(如整数、浮点数)被存储在内存中时,会按照一定的字节顺序将它们存储。主要有两种类型的大小端:

  1. 大端序:数据的高位字节存储在低地址位置低位字节存储在高地址位置
  2. 小端序:数据的低位字节存储在低地址位置高位字节存储在高地址位置

例子:
在这里插入图片描述

这两种大小端序的命名来自于《格列佛游记》(Gulliver’sTravels)中的一个故事:主人公吉列佛来到了两个相互战争的王国,其中一个王国的人们从蛋的大端开始吃,而另一个王国的人则从蛋的小端开始吃。这个故事被引用来描述字节顺序不同的机器。

不同的计算机体系结构(如x86、ARM)有不同的大小端表示方式,而在网络传输中,通常使用大端序(网络字节序)来保证数据的一致性。在实际编程中,需要注意数据在不同大小端机器上的转换和处理。

二:为什么会有大小端

为什么会有⼤⼩端模式之分呢?

  • 这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着⼀个字节,⼀个字节为8bit 位,但是在C语⾔中除了8 bitchar之外,还有16 bitshort 型,32 bit long型(要看具体的编译器)。
  • 另外,对于位数⼤于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度⼤于⼀个字节,那么必然存在着⼀个如何将多个字节安排的问题。因此就导致了⼤端存储模式和⼩端存储模式。

例如:⼀个 16bitshortx ,在内存中的地址为 0x0010x 的值为 0x1122 ,那么0x11 为⾼字节, 0x22 为低字节。对于⼤端模式,就将 0x11 放在低地址中,即 0x0010 中,0x22 放在⾼地址中,即 0x0011 中。⼩端模式,刚好相反。我们常⽤的 X86 结构是⼩端模式,⽽KEIL C51 则为⼤端模式。很多的ARM,DSP都为⼩端模式。有些ARM处理器还可以由硬件来选择是
⼤端模式还是⼩端模式。

三:设计一个小程序来判断当前机器的大小端

方法一:指针类型强转

存储一个int类型变量赋值为1,把它的地址强转为char*类型。
因为1在内存中的存储为0x00000001
如果是小端存储,char类型中存储的应该为0x01
如果是大端存储,char类型中存储的应该为0x00

#include <stdio.h>
int check_sys()
{
 	int i = 1;
 	return (*(char *)&i);
}
int main()
{
 	int ret = check_sys();
 	if(ret == 1)
 	{
 		printf("⼩端\n");
 	}
 	else
 	{
 		printf("⼤端\n");
 	}
 	return 0;
}

方法二:联合体

使用联合体可以判断大小端的原理是通过联合体的成员共享同一块内存空间。在这段代码中,union 定义了一个联合体 un,包含一个整型变量 i 和一个字符型变量 c

  1. 通过将un.i赋值为1,将1存储在联合体 un的整型变量i中。

  2. un.c 表示将联合体 un 的整型变量 i 强制转换为字符型变量 c,这样就可以访问联合体 un 内存中的字节。

  3. 在小端存储方式中,联合体 un 的字节从低地址到高地址分别是 1 00 00 00,其中的 1 是最低有效字节。

  4. 在大端存储方式中,联合体 un 的字节从低地址到高地址分别是 00 00 00 1,其中的 1 是最高有效字节。

int check_sys()
{ 
	union
 	{
 		int i;
 		char c;
 	}un;
 	un.i = 1;
 	return un.c;
}

int main()
{
 	int ret = check_sys();
 	if(ret == 1)
 	{
 		printf("⼩端\n");
 	}
 	else
 	{
 		printf("⼤端\n");
 	}
 	return 0;
}

※ 如果文章对你有帮助的话,可以点赞收藏!!谢谢支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/525825.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第13题罗马数字转整数

题目&#xff1a; 题解&#xff1a; class Solution { private:unordered_map<char, int> symbolValues {{I, 1},{V, 5},{X, 10},{L, 50},{C, 100},{D, 500},{M, 1000},};public:int romanToInt(string s) {int ans 0;int n s.length();for (int i 0; i < n; i) …

Python项目1 外星人入侵

武装飞船 1 规划项目 开发大型项目时&#xff0c;做好规划后再动手编写项目很重要。规划可确保你不偏离轨道&#xff0c;从而提高项目成功的可能性。 下面来编写有关游戏《外星人入侵》的描述&#xff0c;其中虽然没有涵盖这款游戏的所有细节&#xff0c;但能让你清楚地知道…

文心一言上线声音定制功能;通义千问开源模型;openAI又侵权?

文心一言上线定制专属声音功能 百度旗下 AI 聊天机器人文心一言上线新功能&#xff0c;用户录音一句话&#xff0c;即可定制声音。 使用这项功能需要使用文心一言 App。在创建智能体中&#xff0c;点击创建自己的声音&#xff0c;朗读系统提示的一句话&#xff0c;等候几秒钟时…

工程中实践的微服务设计模式

大家好&#xff0c;我是 方圆。最近在读《微服务架构设计模式》&#xff0c;开始的时候我非常的好奇&#xff0c;因为在我印象中&#xff0c;设计模式是常说的那23种设计模式&#xff0c;而微服务的设计模式又是什么呢&#xff1f;这个问题也留给大家&#xff0c;在文末我会附上…

synchronized锁机制升级过程——面试题

1. 无锁状态 对象在没有被任何线程锁定时处于无锁状态。此时对象头中的锁标志位通常表示为无锁&#xff08;例如&#xff0c;标记字段的特定位组合表示无锁或偏向锁状态&#xff09;。 2. 偏向锁&#xff08;Biased Locking&#xff09; 初次获取&#xff1a;当线程首次获得…

谷粒商城实战(011 业务-检索服务)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第173p-第p194的内容 介绍 这些过滤条件都可以写在must里&#xff0c;但是filter不参与评分&#xff0c;速度会快一些&#xff0c;所以一些分类等…

【三十六】【算法分析与设计】综合练习(3),39. 组合总和,784. 字母大小写全排列,526. 优美的排列

目录 39. 组合总和 对每一个位置进行枚举 枚举每一个数出现的次数 784. 字母大小写全排列 526. 优美的排列 结尾 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不…

探索Python爬虫:解析网页数据的神奇之旅

在当今数字化时代&#xff0c;信息的获取变得比以往任何时候都更加便捷。然而&#xff0c;即使在互联网上&#xff0c;获取数据也需要通过正确的工具和技术。Python爬虫就是这样一种强大的工具&#xff0c;它可以让我们轻松地从互联网上收集数据&#xff0c;并将其转化为有用的…

学习人工智能:为何PyTorch深度学习框架不可或缺

在人工智能&#xff08;AI&#xff09;的浩瀚领域中&#xff0c;深度学习作为其核心分支&#xff0c;正以其强大的数据处理能力、模式识别能力和预测能力引领着科技的飞速发展。而在深度学习的众多工具与框架中&#xff0c;PyTorch无疑是一颗璀璨的明星。本文将从PyTorch的特点…

机器视觉学习(十二)—— 绘制图形

目录 一、绘制函数参数说明 1.1 cv2.line(&#xff09;绘制直线 1.2 cv2.rectangle&#xff08;&#xff09;绘制矩形 1.3 cv2.circle&#xff08;&#xff09; 绘制圆形 1.4 cv2.ellipse&#xff08;&#xff09;绘制椭圆 1.5 cv2.polylines&#xff08;&#xff09;绘制…

由elemnent-ui模拟一个全选、反选效果想到的购物车逻辑案例

本文参考 https://blog.csdn.net/sumimg/article/details/137508302?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137508302%22%2C%22source%22%3A%22sumimg%22%7D 我遇到的问题 点击店铺二级的时候&#xff0c;checkedCiti…

wordpress子比主题打开文章详情页一直出现在首页的问题

遇到过几次这种情况了&#xff0c;不知是不是中了木马&#xff0c;无从下手&#xff0c;试了很多方法都不行快要疯了&#xff0c;之前试过解决不了只能重新安装&#xff0c;现在又出现了&#xff0c;第二次了&#xff0c;太麻烦了&#xff0c;突然无意中打开index.php文件发现被…

【频繁模式挖掘】FP-Tree算法(附Python实现)

一、实验内容简介 该实验主要使用频繁模式和关联规则进行数据挖掘&#xff0c;在已经使用过Apriori算法挖掘频繁模式后&#xff0c;这次使用FP-tree算法来编写和设计程序&#xff0c;依然使用不同规模的数据集来检验效果&#xff0c;最后分析和探讨实验结果&#xff0c;看其是…

AttributeError: module ‘cv2‘ has no attribute ‘xfeatures2d‘

新版本的cv2已经不支持这种写法 cv2.xfeatures2d.SIFT_create() 因为这个SIFT特征匹配算法已经专利授权&#xff0c;在开源的CV2中无法使用&#xff0c;当然新版本的cv2也有能够直接使用的SIFT函数 直接使用cv2.SIFT_create()

echarts实现饼图见渐变

数据中添加itemStyle,修改颜色为渐变色 option {tooltip: {show:false,trigger: item},legend: {top: 5%,left: center},series: [{name: Access From,type: pie,radius: [40%, 70%],avoidLabelOverlap: false,label: {show: false,position: center,color: red},emphasis: {…

酷开科技 |酷开系统全视频化升级,让电视回归视频属性

随着消费升级浪潮的兴起&#xff0c;家庭互联网这一概念也在资本的注入下&#xff0c;成为了新风口。酷开系统全视频化升级&#xff0c;让电视回归视频属性&#xff0c;酷开系统在之前瀑布流板块设计的基础上&#xff0c;增加了视频流图文融合的并行界面&#xff0c;同时酷开系…

七、Ajax(Django开发)

Ajax&#xff08;Django开发&#xff09; 知识点的回顾&#xff1a;1.Ajax请求2.订单小结3.图表4.关于文件上传4.1基本操作案例&#xff1a;批量上传数据案例&#xff1a;混合数据&#xff08;Form&#xff09;4.2启用media案例&#xff1a;混合数据&#xff08;form&#xff0…

探索 Java 网络爬虫:Jsoup、HtmlUnit 与 WebMagic 的比较分析

1、引言 在当今信息爆炸的时代&#xff0c;网络数据的获取和处理变得至关重要。对于 Java 开发者而言&#xff0c;掌握高效的网页抓取技术是提升数据处理能力的关键。本文将深入探讨三款广受欢迎的 Java 网页抓取工具&#xff1a;Jsoup、HtmlUnit 和 WebMagic&#xff0c;分析…

Jackson 各种注解使用示例

参考资料 Jackson使い方メモ 目录 一. JsonIgnore二. JsonIgnoreProperties三. JsonProperty3.1 作用于entity属性上&#xff0c;指定json对象属性名3.2 作用于entity方法上&#xff0c;指定json对象属性名 四. JsonFormat4.1 日期格式化4.2 数字格式化4.3 枚举类返回code 五.…

Cortex-M4架构

第一章 嵌入式系统概论 1.1 嵌入式系统概念 用于控制、监视或者辅助操作机器和设备的装置&#xff0c;是一种专用计算机系统。 更宽泛的定义&#xff1a;是在产品内部&#xff0c;具有特定功能的计算机系统。 1.2 嵌入式系统组成 硬件 ①处理器&#xff1a;CPU ②存储器…