news 2026/1/19 0:47:21

大小端存储

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大小端存储

大小端存储 (Endianness) 学习笔记

1. 什么是大小端?

在计算机系统中,多字节数据(如int,float等)在内存中占用的字节数超过 1 个。当我们将这些数据存储在连续的内存地址中时,就涉及到了字节序(Byte Order)的问题,即:高位字节低位字节谁先存在低地址,谁后存在高地址。

  • MSB (Most Significant Byte): 最高有效字节(数据的“高位”)。
  • LSB (Least Significant Byte): 最低有效字节(数据的“低位”)。

例如,十六进制数0x12345678

  • 0x12是 MSB (高位)
  • 0x78是 LSB (低位)

2. 大端模式 (Big-Endian)

定义:数据的高位字节存储在内存的低地址中,而数据的低位字节存储在内存的高地址中。

特点

  • 内存中的字节顺序与我们平时书写/阅读数字的顺序(从左到右)一致。
  • 也就是“高位在前”。

示例
存储0x12345678(假设起始地址为0x100)

内存地址0x100 (低)0x1010x1020x103 (高)
数据0x120x340x560x78

应用场景

  • 网络字节序 (Network Byte Order) 标准(TCP/IP 协议栈)。
  • 某些 RISC 架构处理器(如 SPARC, PowerPC 的早期版本)。

3. 小端模式 (Little-Endian)

定义:数据的低位字节存储在内存的低地址中,而数据的高位字节存储在内存的高地址中。

特点

  • 也就是“低位在前”。
  • 这种存储方式在进行类型转换(如 int 转 short)或加法运算时,CPU 处理起来可能更方便(低位对齐)。

示例
存储0x12345678(假设起始地址为0x100)

内存地址0x100 (低)0x1010x1020x103 (高)
数据0x780x560x340x12

应用场景

  • 常见的主机字节序 (Host Byte Order)。
  • x86 / x64 架构 (Intel, AMD)。
  • ARM (默认通常是小端,但可配置)。

4. 如何判断当前机器的大小端?

我们可以利用 C 语言的union特性或指针强制转换来检测。

方法一:使用 Union

union的成员共享同一块内存空间。

#include<stdio.h>intcheck_endian(){union{inti;charc;}un;un.i=1;// 0x00000001// 如果是小端,低位 0x01 存在低地址,c 读取低地址也是 1// 如果是大端,高位 0x00 存在低地址,c 读取低地址则是 0returnun.c;}intmain(){if(check_endian()==1){printf("当前机器是:小端模式 (Little-Endian)\n");}else{printf("当前机器是:大端模式 (Big-Endian)\n");}return0;}

方法二:使用指针转换

#include<stdio.h>intmain(){inta=1;char*p=(char*)&a;// 获取 int 的低地址字节if(*p==1){printf("小端\n");}else{printf("大端\n");}return0;}

5. 网络字节序与主机字节序转换

由于不同的计算机可能采用不同的字节序,为了保证数据在网络传输中的正确性,TCP/IP 协议规定:网络传输使用大端模式 (Big-Endian)

因此,在发送数据前,需要将主机字节序转换为网络字节序;接收数据后,需要将网络字节序转换为主机字节序

常用函数 (在<arpa/inet.h><winsock2.h>中)

  • htons(): Host to Network Short (16位)
  • htonl(): Host to Network Long (32位)
  • ntohs(): Network to Host Short (16位)
  • ntohl(): Network to Host Long (32位)

记忆口诀

  • h(Host) 代表主机
  • n(Network) 代表网络
  • s(Short) 代表 16 位
  • l(Long) 代表 32 位

6. 总结

特性大端模式 (Big-Endian)小端模式 (Little-Endian)
存储方向高位 -> 低地址低位 -> 低地址
直观性符合人类阅读习惯不符合阅读习惯,但在逻辑电路处理上有优势
典型应用网络协议、PowerPCx86, ARM, Windows, Linux (大部分)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/15 12:58:02

建军节特别企划:军人坚毅声线讲述英雄事迹

军人声线背后的AI力量&#xff1a;IndexTTS 2.0 如何让英雄故事“声”入人心 在建军节的特别企划中&#xff0c;一段由真实边防战士原声演绎的英雄事迹音频悄然走红——语气坚定、节奏铿锵&#xff0c;每一个停顿都仿佛与画面呼吸同步。人们惊叹于这声音的真实感与感染力&#…

作者头像 李华
网站建设 2026/1/16 10:40:16

去中心化存储方案:把IndexTTS 2.0音频存进IPFS网络

去中心化存储方案&#xff1a;把 IndexTTS 2.0 音频存进 IPFS 网络 在 AI 生成内容&#xff08;AIGC&#xff09;爆发式增长的今天&#xff0c;语音合成技术已经不再是科研机构的专属工具。像 B站开源的 IndexTTS 2.0 这样的模型&#xff0c;让普通人也能用几秒钟的音频片段克…

作者头像 李华
网站建设 2026/1/17 5:49:18

描述生成效果差?Dify优化秘籍让你秒变AI写作高手

第一章&#xff1a;描述生成效果差&#xff1f;Dify优化秘籍让你秒变AI写作高手在使用 Dify 构建 AI 应用时&#xff0c;许多用户发现基于自然语言描述生成的工作流或代码效果不理想。这通常源于提示词模糊、上下文缺失或模型理解偏差。掌握以下优化策略&#xff0c;可显著提升…

作者头像 李华
网站建设 2026/1/16 23:52:42

终极指南:如何将电视盒子改造成高性能OpenWrt路由器

终极指南&#xff1a;如何将电视盒子改造成高性能OpenWrt路由器 【免费下载链接】amlogic-s9xxx-openwrt Support for OpenWrt in Amlogic, Rockchip and Allwinner boxes. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3568, rk…

作者头像 李华
网站建设 2026/1/16 20:25:34

播客平台推荐机制破解:高质量AI语音内容更容易被推送?

播客平台推荐机制破解&#xff1a;高质量AI语音内容更容易被推送&#xff1f; 在播客和音频内容爆发式增长的今天&#xff0c;一个残酷的事实正在浮现&#xff1a;即便内容再深刻&#xff0c;如果声音“不够好听”&#xff0c;也可能被算法悄悄埋没。 无论是喜马拉雅、小宇宙…

作者头像 李华
网站建设 2026/1/18 2:13:17

JSON还是XML?Dify响应数据格式选择背后的秘密

第一章&#xff1a;JSON还是XML&#xff1f;Dify响应数据格式的抉择在构建现代AI应用平台Dify的过程中&#xff0c;选择合适的响应数据格式是决定系统可扩展性与前端集成效率的关键决策。尽管XML曾长期作为Web服务的数据交换标准&#xff0c;但在RESTful架构和轻量级通信需求日…

作者头像 李华