【网络安全】——大端序(Big-Endian)​​和​​小端序(Little-Endian)

字节序(Endianness)是计算机系统中多字节数据(如整数、浮点数)在内存中存储或传输时,​​字节排列顺序​​的规则。它分为两种类型:​​大端序(Big-Endian)​​和​​小端序(Little-Endian)​​。这一概念源于不同硬件体系结构的设计差异,直接影响数据在不同系统间的兼容性。


​一、核心概念与示例​

1. ​​大端序(Big-Endian)​
  • ​定义​​:高位字节(Most Significant Byte, MSB)存储在低地址,低位字节(Least Significant Byte, LSB)存储在高地址。
  • ​示例​​:
    以16位整数 0x1234 为例(十六进制):
    • 高位字节:0x12
    • 低位字节:0x34
    • ​内存地址​​:
      地址 0x1000: 0x12  
      地址 0x1001: 0x34  
    • ​类比​​:类似人类书写数字的顺序(从左到右,高位在前)。
2. ​​小端序(Little-Endian)​
  • ​定义​​:低位字节(LSB)存储在低地址,高位字节(MSB)存储在高地址。
  • ​示例​​:
    同一数值 0x1234
    • 高位字节:0x12
    • 低位字节:0x34
    • ​内存地址​​:
      地址 0x1000: 0x34  
      地址 0x1001: 0x12  
    • ​类比​​:类似倒序书写数字(从右到左,低位在前)。

​二、为什么需要关注字节序?​

1. ​​跨系统兼容性问题​
  • ​场景​​:不同硬件架构(如x86 vs ARM)或网络传输(如TCP/IP)时,若未统一字节序,会导致数据解析错误。
    • ​经典案例​​:
      • x86 CPU(小端序)向PowerPC(大端序)发送数据 0x1234,接收方会错误解析为 0x3412
2. ​​常见应用场景​
​场景​​典型字节序​​原因​
网络传输(TCP/IP)大端序(网络字节序)统一标准(RFC 1700规定)
x86/x64 CPU小端序Intel/AMD处理器设计传统
文件格式(如JPEG)大端序跨平台兼容性要求
ARM架构可配置(默认小端序)灵活性(支持两种模式)

​三、字节序的检测与转换​

1. ​​检测当前系统的字节序​
#include <stdio.h>int main() {unsigned int num = 0x12345678;unsigned char *p = (unsigned char *)&num;if (*p == 0x78) {printf("Little-Endian\n");  // 低位在前:0x78 0x56 0x34 0x12} else {printf("Big-Endian\n");     // 高位在前:0x12 0x34 0x56 0x78}return 0;
}
2. ​​字节序转换函数​
  • ​网络编程常用函数​​:

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);  // 主机序→网络序(32位)
uint16_t htons(uint16_t hostshort); // 主机序→网络序(16位)
uint32_t ntohl(uint32_t netlong);   // 网络序→主机序(32位)
uint16_t ntohs(uint16_t netshort);  // 网络序→主机序(16位)
  • ​手动转换方法​​(以32位整数为例):
uint32_t swap_endian(uint32_t num) {return ((num >> 24) & 0xFF)      |  // 原最高字节→最低位((num >> 8)  & 0xFF00)    |((num << 8)  & 0xFF0000)  |((num << 24) & 0xFF000000);
}

四、实际案例分析​

1. ​​网络协议解析​
  • ​问题​​:接收到的网络数据包需按大端序解析,但本地系统为小端序。
  • ​解决方案​​:
uint32_t network_value = 0x12345678;
uint32_t host_value = ntohl(network_value);  // 转换为本地字节序
2. ​​文件格式处理​
  • ​PNG文件头​​:固定以大端序存储,签名字节为 0x89 0x50 0x4E 0x47
  • ​错误处理​​:若按小端序读取,会误判为 0x47 0x4E 0x50 0x89,导致文件解析失败。
3. ​​嵌入式系统开发​
  • ​传感器数据​​:某些I2C/SPI设备返回的数据可能使用与主控CPU不同的字节序。
  • ​解决方法​​:
uint16_t sensor_data = read_from_sensor();  // 假设为大端序
uint16_t converted_data = (sensor_data << 8) | (sensor_data >> 8);  // 手动转小端序

​五、总结​

  • ​核心区别​​:大端序是“高位在前”,小端序是“低位在前”。
  • ​关键原则​​:
    • ​跨系统通信时需统一字节序​​(网络传输默认用大端序)。
    • ​处理外部数据(文件、网络包)时,必须显式转换字节序​​。
  • ​记忆技巧​​:
    • 大端序:类似人类书写(如数字 1234 存储为 12 34)。
    • 小端序:倒序存储(如数字 1234 存储为 34 12)。

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

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

相关文章

六个仓库合并为一个仓库,保留master和develop分支的bat脚本

利用git subtree可以实现多个仓库合并为一个仓库&#xff0c;手动操作起来太麻烦了&#xff0c;今天花了点时间写了一个可执行的脚本&#xff0c;现在操作起来就方便多了。 1、本地新建setup.bat文件 2、用编辑器打开&#xff08;我用的是Notepad&#xff09; 3、把下面代码…

使用定时器监视当前PID 如果当前程序关闭 UI_Core.exe 也随之自动关闭实现方法

使用定时器监视当前PID 如果当前程序关闭 UI_Core.exe 也随之自动关闭实现方法 描述: C20 QT6.9 VS2022 中使用QProcess::startDetached(“UI_Core.exe”, QStringList(), QString(), &UI_Manage_pid);是启动目标程序 能否同时告诉目标程序当前宿主程序的PID,在UI_CORE.EX…

神经网络是如何工作的

人工智能最核心的技术之一&#xff0c;就是神经网络&#xff08;Neural Networks&#xff09;。但很多初学者会觉得它是个黑盒&#xff1a;为什么神经网络能识别图片、翻译语言&#xff0c;甚至生成文章&#xff1f; 本文用图解最小代码实现的方式&#xff0c;带你深入理解&am…

LeetCode热题100 两数之和

目录 两数之和题目解析方法一暴力求解代码 方法二哈希代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f978; C语言 &#x1f43f;️&#x1f43f;️&#x1f43f;…

在线服务器具体是指什么?

在线服务器主要是指一种能够随时进行网络连接、管理和操作的服务器&#xff0c;在线服务器是通过互联网或者是本地网络&#xff0c;来为企业和用户提供数据存储和网络服务的&#xff0c;在线服务器也可以是物理服务器或者是虚拟服务器&#xff0c;能够根据远程访问工具进行管理…

OSPF综合性实验

实验拓扑&#xff1a; 第一步&#xff1a;进行子网划分 172.16.0.0/17 172.16.0000 00 00.00000000 -- area1 172.16.0.1/22 -- AR1--G0/0/0 172.16.0.2/22 -- AR2--G0/0/0 172.16.0.3/22 -- AR3--G0/0/0 172.16.4.1/22 -- AR1-- Lo0 172.16.8.2/22 -- AR2-- Lo0 172.16.12.3/…

WEB前端表单及表格标签综合案例

表单标签综合案例&#xff1a; 源代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

实战项目3(04)

​​​​​​目录 ​​​​​​任务场景一 【r1配置】 【sw1配置】 任务场景二 【r1配置】 【sw1配置】 【sw2配置】 任务场景一 某公司网络为了减少广播包对网络的影响&#xff0c;网络管理员对网络进行了VLAN划分&#xff0c;完成VLAN划分后&#xff0c;为了不影响VL…

tinyint(3)数据类型讲解

TINYINT(3) 是数据库中用于定义字段数据类型的一种写法&#xff0c;常见于 MySQL 等数据库系统。下面来详细了解其含义和作用&#xff1a; 数据类型本质 TINYINT 属于整数类型&#xff0c;在不同的数据库系统中&#xff0c;它所占用的存储空间和表示范围通常是固定的。以 MyS…

[原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取自身程序的所在的目录?

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…

自定义prometheus exporter实现监控阿里云RDS

# 自定义 Prometheus Exporter 实现多 RDS 数据采集## 背景1. Prometheus 官网提供的 MySQL Exporter 对于 MySQL 实例只能一个进程监控一个实例&#xff0c;数据库实例很多的情况下&#xff0c;不方便管理。 2. 内部有定制化监控需求&#xff0c;RDS 默认无法实现&#xff0c;…

开放原子大赛石油软件赛道参赛经验分享

亿级以上网格油藏模型三维可视化 一、赛项背景 油藏数值模拟是油气田开发中至关重要的一环。油藏数值模拟将储层与井的数学模型离散求解&#xff0c;预测地下流体、能量等的动态变化&#xff0c;广泛应用于油田产量评估、开发方案优化等。随着计算机技术特别是并行技术的发展…

学习方法讨论——正论科举精神的内核

世界不存在绝对的善&#xff0c;可以很善&#xff0c;但很难找到绝对的善&#xff0c;总带些副作用&#xff1b;世界上也不存在绝对的恶&#xff0c;可以很恶&#xff0c;但很难找到绝对的恶&#xff0c;可以尝试举例&#xff1b; 再者&#xff0c;物极必反&#xff0c;当对一个…

网络不再神秘:如何有效利用服务器网络流量探针进行监控?

目录 一、流量探针到底是个啥&#xff1f; 二、别只是“部署了”&#xff0c;关键在“用得好” 1. 做到“最小粒度”数据采集 2. 结合时间窗口&#xff0c;构建行为基线 3. 利用标签化管理&#xff0c;提升可读性 4. 把探针输出对接安全告警系统 三、那如何部署才合理&a…

uniapp(微信小程序)>关于父子组件的样式传递问题(自定义组件样式穿透)

在父组件中给子组件添加类名,子组件的样式由父组件决定 由于"微信小程序"存在【样式隔离机制】&#xff0c;且默认设置为isolated(启用样式隔离)&#xff0c;因此这里给出以下两种解决方案&#xff1a; // 小程序编译机制 1. 当 <style scoped> 存在时&#…

基于FastAPI框架的日志模块设计

以下是一个基于FastAPI框架设计的日志模块&#xff0c;结合SQLite数据库实现增删改查功能的完整实现方案&#xff1a; 1. 项目结构 your_project/ ├── app/ │ ├── logs/ # 日志模块目录 │ │ ├── models.py # 数据库模型定义 │ │ …

面试题:C++虚函数可以是内联函数吗?

目录 1.引言 2.示例 3.总结 1.引言 为什么C的虚函数和内联函数这两个看似矛盾的特性能否共存&#xff1f;这个问题实际上触及了C编译期优化与运行时多态性之间的微妙平衡。我发现这个问题不仅是面试中的常见陷阱&#xff0c;更是理解C深层机制很好的一个点。 虚函数可以被声…

用python清除PDF文件中的水印(Adobe Acrobat 无法删除)

学校老师发的资料&#xff0c;有时候会带水印&#xff0c;有点强迫症的都想给它去掉。用Adobe Acrobat试了下&#xff0c;检测不到水印&#xff0c;无法删除&#xff01;分析发现原来这类PDF文件是用word编辑的&#xff0c;其中的水印是加在了页眉中&#xff01; 自己动手想办法…

Oracle中自定义异常内置异常嵌套异常的捕获处理

一、异常类型分类 类型说明示例内置预定义异常Oracle已命名异常&#xff08;如NO_DATA_FOUND&#xff09;查询无数据时触发内置非预定义异常未命名的Oracle错误&#xff08;需用PRAGMA EXCEPTION_INIT关联&#xff09;ORA-02290&#xff08;违反检查约束&#xff09;自定义异常…

《Flutter社交应用暗黑奥秘:模式适配与色彩的艺术》

暗黑模式已从一种新奇的功能演变为用户体验中不可或缺的一环。对于Flutter开发者而言&#xff0c;如何在社交应用中完美实现暗黑模式适配与色彩对比度优化&#xff0c;是一场充满挑战与惊喜的技术探索之旅。 暗黑模式&#xff0c;绝非仅仅是将界面颜色反转这么简单。从用户体验…