什么是字节序、大小端、高低字节、高低地址?

news2024/10/28 7:52:03

目录

1.  什么是字节序(Endianness)?

2. 什么是大小端(Big-Endians and Little-Endian)?

3. 什么时候需要用到大小端的概念?

4. 如何确认系统的大小端模式?

5. 什么是大小端定义中的最高有效字节?

6. 什么是大小端定义中的高地址?低地址?

7. 参考链接

思考题:


1.  什么是字节序(Endianness)?

字节序是计算机内存中单个多字节数据(int, float, etc)的字节存储顺序,有大端和小端两种。

2. 什么是大小端(Big-Endians and Little-Endian)?

大端系统中,先存储最高有效字节(MSB)。小端系统中,先存储最低有效字节(LSB)

比如在存储器0x100~0x103地址中存储uint32_t型的数据0x01234567,在大端系统中的存储顺序为“0x01 0x23 0x45 0x67”,在小端系统中的存储顺序为“0x67 0x45 0x23 0x01”,如下图:

3. 什么时候需要用到大小端的概念?

  • 大端和小端两种格式都有各自的优点和缺点。
    • 一些算法在小端模式的处理器上运行效率更高,另一些算法则在大端模式的处理器上运行效率更高。
    • 大端字节序比较符合人类的阅读习惯,读单个数时,从左到右,MSB在前,LSB在后,比如0x1234;
  • 处理器可以设计为小端、大端双端(能够处理这两种情况)。ARM既支持大端也支持小端,默认工作在小端模式;x86是小端模式;网络协议是大端模式;
  • 现在计算机系统中常用的字节序,很大程度上取决于过去消费者和市场的选择。 就像我们选择手机品牌一样,当一种品牌被很多人选择后,它就成了主流。
  • 一般只有在不同的处理器之间相互通讯时,需要考虑字节序。

4. 如何确认系统的大小端模式?

方法1:查资料

方法2:运行以下代码来确认当前所使用的处理器的字节序:

#include <stdio.h>
  
int main(void)
{
    unsigned int value = 0x1;
    char *r = (char *) &value;
 
    if (*r == 1) 
        printf("Your system is Little Endian\n");
    else
        printf("Your system is Big Endian\n");
    return 0;
}

5. 什么是大小端定义中的最高有效字节?

单个多字节数据中,数值贡献最大的字节,叫最高有效字节(Most Significant Byte, MSB);数值贡献最小的字节,叫最低有效字节(Least Significant Byte, LSB);也可以理解为组成字节的bits是比较高位的bits的为高字节。比如多字节数据0x12345678,它的MSB为0x12,LSB为0x78。

6. 什么是大小端定义中的高地址?低地址?

地址是用来标识计算机内存中各个存储单元的编号,你可以把它想象成一栋大楼的楼层,每个楼层都有一个唯一的楼层号,而内存中的每个存储单元都有一个唯一的地址。

  • 低地址: 通常表示内存的起始位置,就像大楼的一层。
  • 高地址: 表示内存的结束位置,就像大楼的顶层。

计算机通过内存地址来有序地操作内存中的数据,存储数据一般从低地址开始存储,最后再存高地址。比如有一个uint32_t型的多字节数据要存入地址0x00~0x03,计算机会先写入0x00;此时0x00为最低内存地址;

7. 参考链接

https://embetronicx.com/tutorials/p_language/c/little-endian-and-big-endian/

What is Endianness? Big-Endian & Little-Endian - GeeksforGeeks

思考题:

1. 32位机器存储uint64_t数据0x1122334455667788时,内存中的字节排布是?

2. 单个多字节数据?结构体算吗?

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

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

相关文章

[LVGL] MessageBox

该例子用lvgl9 来测试&#xff0c;对话框从底部升上来。当点击关闭或者确认按键时&#xff0c;会向绑定对象发送按键事件&#xff0c;参数 100/101. /*** file lv_demo_test.c**/#include "stdio.h" #include "stdlib.h" #include "lvgl.h"#ifde…

985研一,转嵌入式好还是后端开发好?

有个老铁问&#xff0c;985研一&#xff0c;转嵌入式好还是后端开发好&#xff1f; 我认为&#xff0c;这学历&#xff0c;两个随便挑&#xff0c;我说的&#xff0c;从趋势来看&#xff0c;更建议嵌入式&#xff0c;走供应链上游&#xff0c;芯片原厂、新能源车企、军工或者搞…

IDEA自动生成时序图插件-SequenceDiagram

目录 前言介绍安装在线安装离线安装 使用基本使用使用技巧 知识扩展为什么要画时序图&#xff1f;为什么要使用SequenceDiagram插件&#xff1f; 前言 工欲善其事&#xff0c;必先利其器&#xff0c;用对工具&#xff0c;事半功倍。我向大家介绍一款卓越的插件——Sequence Dia…

衡石分析平台系统分析人员手册-展示类控件创建富文本攻略

富文本​ 富文本控件是一种常见的控件&#xff0c;可用来展示文本信息、用户属性信息&#xff0c;在数据分析中起到辅助分析的功能。 富文本常见的使用场景有&#xff1a; 仅展示纯文本信息。在富文本中展示数据集字段、指标、参数等信息。使用富文本展示用户属性相关信息。在…

H3m-Blog

H3m-Blog 一、项目介绍 1.1 项目介绍 一个基于SpringBoot和Vue3的博客系统&#xff0c;博客名称来源于陈奕迅于2009年发布的粤语专辑《H3M》 1.2 技术架构 主要技术栈&#xff1a; SpringBoot2 Vue3 MySQL8.0 1.3 主要功能 内容丰富&#xff0c;尽情体验~ 二、快速开始…

Win11安装基于WSL2的Ubuntu

1. 概述 趁着还没有完全忘记&#xff0c;详细记录一下在Win11下安装基于WSL2的Ubuntu的详细过程。不得不说WSL2现在被微软开发的比较强大了&#xff0c;还是很值得安装和使用的&#xff0c;笔者就通过WSL2安装的Ubuntu成功搭建了ROS环境。 2. 详论 2.1 子系统安装 在Win11搜…

【HarmonyOS NEXT】使用 Navigation 对折叠屏设备页面进行分栏展示,优化 UI 交互

关键词&#xff1a;折叠屏、navigation、router、路由、分栏、UI 随着科技的发展&#xff0c;手机设备形态也由一面屏向多面屏进行发展&#xff0c;那么软件的UI适配也面临着问题&#xff0c;本篇文章主要解决大屏设备的页面 UI 适配问题&#xff0c;如折叠屏&#xff0c;平板&…

MySql数据库中数据类型

本篇将介绍在 MySql 中的所有数据类型&#xff0c;其中主要分为四类&#xff1a;数值类型、文本和二进制类型、时间日期、String 类型。如下&#xff08;图片来源&#xff1a;MySQL数据库&#xff09;&#xff1a; 目录如下&#xff1a; 目录 数值类型 1. 整数类型 2. …

[MoeCTF 2022]endian

查看发现是64位文件&#xff0c;且看到了amd64-64-little&#xff08;这里是小端序&#xff09; 所以我们要反向输入 对于整数 0x12345678&#xff0c;在小端序存储下的内存布局为&#xff1a; 地址 内容 低地址 0x78 0x56 0x34 高地址 0x12 查看main函数&#xff0c…

Python4

4. 更多控制流工具 除了刚介绍的 while 语句&#xff0c;Python 还用了一些别的。我们将在本章中遇到它们。 4.1. if 语句 if elif else if x<0: x 0 print(Negative changed to zero) elif x0: print( zero) else: print(More) 4.2. for 语句 Pyth…

游戏服务器被攻击有办法防护吗

游戏服务器受到攻击时比较常见的。就算是刚上线的游戏&#xff0c;都会有被攻击的时候。游戏服务器受到攻击的原因以及解决方案有哪些呢&#xff1f; 游戏服务器被攻击的原因有哪些呢&#xff1f; 1、常见的攻击&#xff0c;大部分来自于同行之间的恶意竞争&#xff0c;你的游…

Rust 力扣 - 3. 无重复字符的最长子串

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们需要记录当前子串的开始下标&#xff0c;一个哈希表记录字符和遍历过程中最后一次出现的索引 遍历字符串&#xff0c;如果在当前字符在哈希表中有记录&#xff0c;并且索引下标大于当前子串的开始下标&…

Lesson12---queue

Lesson12—queue 本篇博客介绍了cqueue的介绍使用以及模拟实现 文章目录 Lesson12---queue前言一、queue的成员函数1 queue2.empty3.size4.front5.back6.push7.pop 二、相关题目三、模拟实现完整代码 四、deque&#xff08;双端队列&#xff09;总结 前言 queue的文档:https:…

go高并发之路——本地缓存

一、使用场景 试想一个场景&#xff0c;有一个配置服务系统&#xff0c;里面存储着各种各样的配置&#xff0c;比如直播间的直播信息、点赞、签到、红包、带货等等。这些配置信息有两个特点&#xff1a; 1、并发量可能会特别特别大&#xff0c;试想一下&#xff0c;一个几十万…

CANopen中错误帧的制造和观测

本文讲述如何制造和观察CANopen中的错误帧&#xff08;Error frame&#xff09;&#xff0c;以Linux下的“VCAN0”为CAN接口来做测试&#xff0c;所以事先要先创建vcan0 一 制造错误帧 首先安装python CAN&#xff0c; pip3 install python-can然后参考python can的文档编写如…

Android View

前面我们了解了Android四大组件的工作流程&#xff0c;Android中还存在一个和四大组件地位相同的概念&#xff1a;View&#xff0c;用于向用户页面展示内容。我们经常使用的TextView、Button、ImageView控件等都继承于它&#xff0c;也会自定义View实现自定义效果。View类源码内…

2024CSP-J题目简析

扑克牌 1.题目大意&#xff1a;给定n张扑克牌和这n张扑克牌的花色和大小&#xff08;可能会有重复&#xff09;&#xff0c;需要输出还需要多少张牌才能凑齐一副扑克牌&#xff08;这里不考虑大小王&#xff0c;所以共52张&#xff09;。 2.思路概要&#xff1a;由于扑克牌会…

C++ | Leetcode C++题解之第513题找树左下角的值

题目&#xff1a; 题解&#xff1a; class Solution { public:int findBottomLeftValue(TreeNode* root) {int ret;queue<TreeNode *> q;q.push(root);while (!q.empty()) {auto p q.front();q.pop();if (p->right) {q.push(p->right);}if (p->left) {q.push(…

配置smaba (Linux与windows通信)

在Ubuntu上安装Samba是一个简单的过程。以下是详细的步骤&#xff0c;帮助你从安装到基本配置。 步骤1&#xff1a;更新软件包列表 首先&#xff0c;打开终端&#xff0c;确保你的软件包列表是最新的&#xff1a; sudo apt update 步骤2&#xff1a;安装 Samba 接下来…

若依学习 后端传过来的数据在控制台打印为空

导言: 在做若依二次开发时遇到个没见过的bug&#xff0c;用了一些时间排&#xff0c;发现有自己没学过的东西。所以记录一下。后端用的是c#的asp.net core 问题描述&#xff1a; 后端穿过来的有数据的参数(数组)roleIds在控制台打印为空 后端字段定义: 后端数据&#xff1a; 前…