什么是大端?什么是小端?如何验证?

什么是大端?什么是小端?如何验证?

在计算机系统中,大端(Big-Endian)小端(Little-Endian) 是两种不同的字节序(Byte Order),用于描述多字节数据在内存中的存储方式。

1. 大端(Big-Endian)

  • 定义:高位字节存于低地址,低位字节存于高地址。

  • 类比:类似人类读写数字的习惯(从左到右,先高位后低位)。

  • 示例

    :对于 32 位整数0x12345678(十六进制),大端存储方式如下:

    内存地址(由低到高)存储内容(1 字节)
    0x00000x12(高位)
    0x00010x34
    0x00020x56
    0x00030x78(低位)

2. 小端(Little-Endian)

  • 定义:低位字节存于低地址,高位字节存于高地址。

  • 类比:与人类习惯相反,先存储低位字节。

  • 示例

    :同样对于0x12345678,小端存储方式如下:

    内存地址(由低到高)存储内容(1 字节)
    0x00000x78(低位)
    0x00010x56
    0x00020x34
    0x00030x12(高位)

3. 验证方法

通过代码可以验证当前系统的字节序,核心思路是:

  • 定义一个多字节变量(如 int)。
  • 用字符指针(char*)逐个访问其字节,观察存储顺序。
示例代码(C 语言):
#include <stdio.h>int main() {int num = 0x12345678;  // 定义一个32位整数char *p = (char*)&num; // 用字符指针访问其字节// 打印每个字节的十六进制值printf("字节顺序(低地址到高地址):\n");printf("0x%x\n", p[0]);  // 低地址printf("0x%x\n", p[1]);printf("0x%x\n", p[2]);printf("0x%x\n", p[3]);  // 高地址// 判断字节序if (p[0] == 0x78 && p[3] == 0x12) {printf("当前系统为小端(Little-Endian)\n");} else if (p[0] == 0x12 && p[3] == 0x78) {printf("当前系统为大端(Big-Endian)\n");} else {printf("未知字节序\n");}return 0;
}
示例代码(Python):
import sys# 方法1:使用sys.byteorder
print("sys.byteorder结果:", sys.byteorder)  # 小端返回"little",大端返回"big"# 方法2:手动验证
num = 0x12345678
# 将整数转换为4字节的字节串(默认大端,需指定小端参数验证)
bytes_big = num.to_bytes(4, byteorder='big')
bytes_little = num.to_bytes(4, byteorder='little')# 获取系统存储的实际字节
import ctypes
p = ctypes.cast(ctypes.pointer(ctypes.c_int(num)), ctypes.POINTER(ctypes.c_char * 4)).contents
actual_bytes = bytes(p)if actual_bytes == bytes_big:print("当前系统为大端(Big-Endian)")
elif actual_bytes == bytes_little:print("当前系统为小端(Little-Endian)")

4. 常见应用场景

  • 硬件:x86、ARM(默认)等架构使用小端;PowerPC、SPARC 等使用大端。
  • 网络协议:TCP/IP 协议规定使用大端(称为 “网络字节序”),因此跨平台通信时需转换。
  • 文件格式:部分格式(如 BMP 图像)使用小端,部分(如 JPEG、PNG)使用大端。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 语句和函数

1. JavaScript 语句 1&#xff09;if语句 if (condition) statement1 else statement2这里的条件&#xff08;condition&#xff09;可以是任何表达式&#xff0c;并且求值结果不一定是布尔值。 ECMAScript会自动调用Boolean()函数将这个表达式的值转换为布尔值。 如果条件…

代码随想录刷题Day22

替换数字 这道题比较简单&#xff0c;遇到字母就copy到新的字符数组&#xff0c;如果是遇到数字&#xff0c;就在新字符数组中加入number的字符串。代码如下&#xff1a; #include<stdio.h> #include<ctype.h> #include<string.h> #define Max 1000000 int…

逻辑回归参数调优实战指南

逻辑回归的参数调节参数展示 LogisticRegression(penaltyl2,dualFalse,tol1e4,C1.0,fit_interceptTrue,intercept_scaling1,class_weightNone,random_stateNone,solverliblinear,max_iter100,multi_classovr,verbose0,warm_startFalse, n_jobs1)在前面的学习中&#xff0c;我们…

cocosCreator2.4 googlePlay登录升级、API 35、16KB内存页面的支持

环境&#xff1a;我这里是cocosCreator 2.4.12 导出的android 工程 登录升级 后台收到的google 的提醒&#xff1a; 之前是通过implementation com.google.android.gms:play-services-auth:20.0.0 来获取玩家 uid 和 邮箱&#xff0c;然后发送到我们的服务器获取账号。 升级…

unity avpro实现互动影游关键问题

创建视频播放器​在Hierarchy面板中右键创建&#xff1a;Video > AVPro Video - MediaPlayer创建后会生成一个MediaPlayer对象&#xff0c;用于控制视频播放添加视频资源将视频文件放入项目的StreamingAssets文件夹下在MediaPlayer组件的设置中选择要播放的视频文件在UI上显…

【C找第一个只出现一次的字符】2022-8-18

缘由样例通过&#xff0c;请问为什么错了呢&#xff1f;(语言-c语言)-编程语言-CSDN问答 char str[100000];fgets(str, 100000, stdin);int a[26]{}, i, count 0;int len strlen(str);for (i 0; i<len; i) a[str[i] - a];for (i 0; i<len; i){if (a[str[i] - a] 1){…

MCP AI应用通信的底层机制

技术小馆专注AI与Java领域的前沿技术知识库 技术小馆官网 在AI应用快速发展的今天&#xff0c;不同AI系统之间的高效通信成为技术架构的关键挑战。MCP&#xff08;Model Context Protocol&#xff09;作为新一代AI应用通信协议&#xff0c;正在重新定义AI工具生态的构建方式。…

UI测试平台TestComplete如何实现从Git到Jenkins的持续测试

还在为手动做UI测试又慢又累发愁&#xff1f;更头痛的是&#xff0c;代码改完还得等半天才能测&#xff0c;测完了结果又散得到处都是&#xff0c;根本看不清质量全貌?TestComplete帮你搞定&#xff1a;直接连上你的Git仓库&#xff0c;代码一有动静就能感知。接着&#xff0c…

【Debian】4-‌2 Gitea搭建

【Debian】4-‌2 Gitea搭建一、准备工作二、创建 Gitea 用户&#xff08;推荐&#xff09;三、下载并安装 Gitea四、配置Gitea4-1 创建目录结构4-2 创建配置目录五、配置 Systemd 服务六、访问 Gitea Web 界面七、小插曲一、准备工作 更新系统软件为最新 sudo apt update &am…

【CDH × Docker】一次测试部署,N 次复用的环境镜像方案

&#x1f680; 一次测试环境的探索&#xff1a;我如何将 CDH 集群打包成 Docker 镜像&#xff0c;留给未来的自己 &#x1f9e9; 背景故事 最近在项目中&#xff0c;我们计划上线一个基于 CDH&#xff08;Cloudera Distribution Hadoop&#xff09; 的大数据平台。正式上生产环…

Java 日期时间格式化模式说明

Java 中日期时间格式化使用特定的模式字符串来定义输出格式。以下是常见的格式化符号及其含义&#xff0c;适用于 SimpleDateFormat 和 DateTimeFormatter一、日期部分格式化符号符号含义示例y年 (Year)yyyy → 2023M月 (Month)MM → 09, MMM → Sep, MMMM → Septemberd月中的…

代码随想录算法训练营三十三天|动态规划part06

LeetCode 322 零钱兑换 题目链接&#xff1a;322. 零钱兑换 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。…

【大模型LLM】大模型训练加速 - 梯度累积(Gradient Accumulation)原理详解

梯度累积&#xff08;Gradient Accumulation&#xff09;原理详解 梯度累积是一种在深度学习训练中常用的技术&#xff0c;特别适用于显存有限但希望使用较大批量大小&#xff08;batch size&#xff09;的情况。通过梯度累积&#xff0c;可以在不增加单个批次大小的情况下模拟…

【数据分享】各省文旅融合耦合协调度及原始数据(2012-2022)

数据介绍引言 文旅融合是推动区域经济高质量发展、促进共同富裕的重要路径。党的二十大报告明确提出“推进文化和旅游深度融合发展”的战略目标&#xff0c;文旅产业通过资源整合与业态创新&#xff0c;可显著缩小城乡、区域差距&#xff0c;提升物质与精神双重福祉&#xff08…

Linux编程: 10、线程池与初识网络编程

今天我计划通过一个小型项目&#xff0c;系统讲解线程池与网络编程的核心原理及实践。项目将围绕 “利用线程池实现高并发网络通信” 这一核心需求展开&#xff0c;具体设计如下&#xff1a; 为保证线程安全&#xff0c;线程池采用单例模式设计&#xff0c;确保全局唯一实例避…

藏云阁 Logo 库(开源项目SVG/PNG高清Logo)

在日常技术方案设计、架构图绘制或PPT制作中&#xff0c;常常会遇到一些问题&#xff0c;比如&#xff1a; 找不到统一风格的开源项目组件图标&#xff0c;PPT中的logo五花八门下载的图标分辨率不足&#xff0c;放大后模糊失真不同来源的图标颜色风格冲突&#xff0c;破坏整体…

从0开始学习R语言--Day64--决策树回归

对于没有特征或者说需要寻找另类关系的数据集&#xff0c;我们通常会用聚合或KNN近邻的方法来分类&#xff0c;但这样的分类或许在结果上是好的&#xff0c;但是解释性并不好&#xff0c;有时候我们甚至能看到好的结果反直觉&#xff1b;而决策树回归做出的结果&#xff0c;由于…

B+树高效实现与优化技巧

B树的定义 一颗M阶B树T,满足以下条件 每个结点至多拥有M课子树 根结点至少拥有两颗子树 除了根结点以外,其余每个分支结点至少拥有M/2课子树 所有的叶结点都在同一层上 有k棵子树的分支结点则存在k-1个关键字,关键字按照递增顺序进行排序 关键字数量满足 ceil( M/2 ) - 1 &…

Android 基础入门学习目录(持续更新)

四大组件 Activity&#xff1a; Service&#xff1a; BroadcastReceiver&#xff1a; ContentProvider&#xff1a; UI 与交互开发 常见的UI布局和UI控件 样式与主题 Fragment Intent 数据存储 自定义View和自定义Group 自定义View 自定义ViewGroup 事件分发 Key…

Linux移动大量文件命令

背景 使用 mv 命令报“/bin/mv: 参数列表过长”&#xff0c;也是第一遇到&#xff0c;查了一下&#xff0c;最后用rsync命令解决了。还好每台服务器&#xff0c;都必装rsync了&#xff0c;记录如下。 命令 nohup rsync -av --remove-source-files --progress /public/tmp/video…