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

单片机和C语言中的一些通用知识:(二)大端和小端

上一篇下一篇
时间复杂度 O(1) 和 O(n)

大端和小端

大端(Big-Endian)和小端(Little-Endian)是两种不同的字节序(Endianness),用于定义多字节数据(如 16 位、32 位整数或浮点数)在计算机内存中的存储顺序。它们的区别核心在于:数据的 “高位字节” 和 “低位字节” 在内存中存放的先后顺序不同

首先,我们要了解三个概念:

  • 高位字节 (High-order byte):指一个数值中权重最高的字节,即最左边的字节。
  • 低位字节 (Low-order byte):指一个数值中权重最低的字节,即最右边的字节。
  • 内存地址:内存是由一系列连续的地址组成的,地址从低到高排列(0x000x01)。

1)区别

  • 大端模式

    • 规则:“位字节存放在地址,位字节存放在地址”。

    • 记忆口诀高低低高(高位 -> 低地址,低位 -> 高地址)。

    • 特点

      • 数据在内存中的排列顺序与人类书写习惯一致(从左到右,从高到低)。

      • 常用于网络协议(如 TCP/IP 中的“网络字节序”就是大端)、某些处理器架构(如 PowerPC, SPARC, MIPS 的部分模式)。

  • 小端模式

    • 规则:“位字节存放在地址,位字节存放在地址”。

    • 记忆口诀低低高高(低位 -> 低地址,高位 -> 高地址)。

    • 特点

      • 数据在内存中的排列顺序与人类书写习惯相反。

      • 这种方式便于 CPU 从低地址开始逐字节读取数据时,能快速获取到数值的低位部分,对于加法等运算有潜在优势。

      • 广泛应用于 x86/x64 架构的 PC、以及 绝大多数 ARM 处理器(ARM 支持大小端,但通常配置为小端)。

  • 记忆诀窍

    • 大端:“”对应“”,所以 高位字节 放在 低地址(开头)。
    • 小端:“”对应“”,所以 低位字节 放在 低地址(开头)。

2)示例

假设我们有一个 32 位(4 字节)的十六进制数:0x12345678,其中:

  • 0x12最高位字节(权重最大)
  • 0x78最低位字节(权重最小)

现在,我们要把这个数存储在内存中,起始地址为 0x1000。那么两种模式下的存储情况分别为:

大端模式:

内存地址存储的数据
0x10000x12
0x10010x34
0x10020x56
0x10030x78

小端模式:

内存地址存储的数据
0x10000x78
0x10010x56
0x10020x34
0x10030x12

3)了解的重要性

  1. 跨平台数据交换:
    • 当两台使用不同字节序的设备通过网络或文件交换数据时,如果不对字节序进行转换,接收到的数据就会被错误解读。
    • 因此,网络协议(如 IP、TCP)规定使用大端序(网络字节序),发送方如果是小端机器,需要调用 htonl() / htons() 等函数将数据转换为网络字节序,接收方再用 ntohl() / ntohs() 转换回来。
  2. 嵌入式开发和调试:
    • 在查看内存 dump 或调试变量时,了解目标处理器的字节序对于正确解析数据至关重要。
    • 某些硬件外设可能要求特定的字节序。
  3. 联合体 (union) 和类型转换:
    • 在 C 语言中,利用 union 或指针强制类型转换来“拆解”多字节数时,结果会直接受字节序影响。

http://www.dtcms.com/a/592910.html

相关文章:

  • 【疑难解答】MySQL 报错 Public Key Retrieval is not allowed
  • 个人做AI产品,难点在哪里?
  • Electron 应用中的系统检测方案对比与鸿蒙适配实践
  • Apriel-1.5-15b-Thinker 中间训练新突破
  • 景安网站商城网站建设费用
  • 《MySQL数据库进阶(九):数据库备份与恢复(二)》
  • 进程 端口排查速查手册
  • 《中医基础理论》- 2.哲学基础之藏象学说
  • 【Java 开发日记】我们来说一下 Mybatis 的缓存机制
  • 做直播导航网站好西安网站搭建的公司
  • 简要概括自建网站的优缺点网站的标题怎么做吸引人
  • ⸢ 拾肆-Ⅰ⸥⤳ 实战检验应用实践(上):制定规范 开展演练
  • web网页开发,在线物流管理系统,基于Idea,html,css,jQuery,jsp,java,SSM,mysql
  • 企业级混合存储架构:MySQL + MinIO 混合存储实践
  • Android 底部导航栏 (BottomNavigationView) 制作教程
  • 当“老龄化”撞上“数字化”:金融业的“续命解药”还是“增长新图”?银行保险AI人工智能数字化营销销售培训老师培训讲师
  • ArrayList与LinkedList的比较
  • 魏公村网站建设建设部网站电话
  • MySQL索引篇 -- 从数据页的角度看B+树
  • 使用 Newtonsoft.Json(Json.NET)库将对象导出为格式化的 JSON 文件
  • 林州市网站建设给个网站好人有好报
  • 使用前端框架vue做一个小游戏
  • 【操作系统原理】进程优先级与命令行参数、环境变量详解
  • 【深度学习新浪潮】扩散模型中,VAE潜空间正则化如何为生成带来帮助?
  • 从零学习Node.js框架Koa 【四】Koa 与数据库(MySQL)连接,实现CRUD操作
  • Zotero在代理模式下无法同步问题
  • LeetCode(python)——438.找到字符串中所有字母异位词
  • 解决添加asp.net网站报错请添加 MIME 映射
  • 浙江省工程建设管理协会网站常州小程序开发公司
  • ASP vs ASP.NET vs ASP.NET Core:三代微软 Web 技术核心区别解析