news 2026/2/16 9:58:30

大小端存储

作者头像

张小明

前端开发工程师

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/2/11 7:04:23

NTFSTool:打破Mac与Windows文件壁垒的智能磁盘管理神器

NTFSTool&#xff1a;打破Mac与Windows文件壁垒的智能磁盘管理神器 【免费下载链接】ntfstool A ntfs tool for mac 项目地址: https://gitcode.com/gh_mirrors/nt/ntfstool 还在为Mac无法直接读写NTFS磁盘而烦恼吗&#xff1f;NTFSTool作为一款专为Mac用户设计的免费工…

作者头像 李华
网站建设 2026/2/14 16:04:06

智能PDF目录生成:零基础自动化解决方案

智能PDF目录生成&#xff1a;零基础自动化解决方案 【免费下载链接】pdf.tocgen 项目地址: https://gitcode.com/gh_mirrors/pd/pdf.tocgen 还在为PDF文档的导航问题而烦恼吗&#xff1f;每次面对长篇技术手册或学术论文时&#xff0c;是否都渴望一个清晰的目录结构来提…

作者头像 李华
网站建设 2026/2/10 8:38:11

Dark Reader终极指南:7个简单步骤告别屏幕疲劳

Dark Reader终极指南&#xff1a;7个简单步骤告别屏幕疲劳 【免费下载链接】darkreader Dark Reader Chrome and Firefox extension 项目地址: https://gitcode.com/gh_mirrors/da/darkreader 在数字时代&#xff0c;我们每天面对屏幕的时间超过8小时&#xff0c;暗黑模…

作者头像 李华
网站建设 2026/2/14 19:28:42

终极指南:如何为NVIDIA显卡打造智能风扇控制系统

终极指南&#xff1a;如何为NVIDIA显卡打造智能风扇控制系统 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanC…

作者头像 李华
网站建设 2026/2/5 17:36:01

ORB-SLAM2语义增强革命:动态特征点智能剔除技术深度解析

ORB-SLAM2语义增强革命&#xff1a;动态特征点智能剔除技术深度解析 【免费下载链接】orbslam_addsemantic 项目地址: https://gitcode.com/gh_mirrors/or/orbslam_addsemantic 在传统机器人导航和AR应用中&#xff0c;SLAM系统常常面临动态环境的巨大挑战。当环境中存…

作者头像 李华
网站建设 2026/2/10 10:12:17

阅读APP书源导入遇到问题怎么办?场景化解决方案指南

阅读APP书源导入遇到问题怎么办&#xff1f;场景化解决方案指南 【免费下载链接】Yuedu &#x1f4da;「阅读」APP 精品书源&#xff08;网络小说&#xff09; 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 还在为「阅读」APP的书源管理而困扰吗&#xff1f;当你…

作者头像 李华