news 2026/4/23 12:05:58

大小端存储

作者头像

张小明

前端开发工程师

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/4/23 12:05:17

秀动抢票神器:告别手速焦虑的智能解决方案

秀动抢票神器&#xff1a;告别手速焦虑的智能解决方案 【免费下载链接】showstart-checkout 秀动抢票 辅助 捡漏 项目地址: https://gitcode.com/gh_mirrors/sh/showstart-checkout 还在为热门演出抢不到票而烦恼吗&#xff1f;showstart-checkout是一款专为秀动平台设计…

作者头像 李华
网站建设 2026/4/18 5:30:07

秋之盒ADB工具箱:5步告别命令行,轻松掌控Android设备

秋之盒ADB工具箱&#xff1a;5步告别命令行&#xff0c;轻松掌控Android设备 【免费下载链接】AutumnBox 图形化ADB工具箱 项目地址: https://gitcode.com/gh_mirrors/au/AutumnBox 还在为复杂的ADB命令头疼不已吗&#xff1f;秋之盒ADB工具箱将彻底改变你管理Android设…

作者头像 李华
网站建设 2026/4/23 12:05:18

新闻快讯语音推送:重大事件发生后分钟级语音通报

新闻快讯语音推送&#xff1a;重大事件发生后分钟级语音通报 在一场突如其来的6.5级地震发生后不到90秒&#xff0c;千万用户的手机同时响起一条语音通知&#xff1a;“请注意&#xff0c;福建沿海地区刚刚发生强震&#xff0c;请立即采取避险措施。”声音沉稳而紧迫&#xff0…

作者头像 李华
网站建设 2026/4/18 21:02:08

智能清洁革命:HomeAssistant与石头扫地机器人的自动化融合指南

你是否曾经想象过&#xff0c;当你离家上班时&#xff0c;扫地机器人能自动开始工作&#xff1b;当你回家时&#xff0c;清洁任务刚好完成&#xff1f;通过HomeAssistant与石头扫地机器人的深度集成&#xff0c;这一切都将成为现实。本文将带你一步步实现从传统手动控制到全自动…

作者头像 李华
网站建设 2026/4/19 20:02:29

配置效率提升300%,Dify容器自动化测试你必须掌握的7个关键技术点

第一章&#xff1a;Dify容器测试配置的核心价值在现代软件交付流程中&#xff0c;Dify 容器测试配置为开发团队提供了高度可复用、环境一致的测试能力。通过将应用及其依赖打包进容器&#xff0c;测试过程摆脱了“在我机器上能运行”的困境&#xff0c;确保从开发到生产的一致性…

作者头像 李华