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

news2025/5/13 5:00:51

字节序(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.coloradmin.cn/o/2374403.html

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

相关文章

BUUCTF——Ezpop

BUUCTF——Ezpop 进入靶场 给了php代码 <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $v…

三、Hadoop1.X及其组件的深度剖析

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月7日 专栏&#xff1a;Hadoop教程 一、Hadoop 1.X 概述 &#xff08;一&#xff09;概念 Hadoop 是 Apache 开发的分布式系统基础架构&#xff0c;用 Java 编写&#xff0c;为集群处理大型数据集提供编程模型&#xff0c;…

PDF2zh插件在zotero中安装并使用

1、首先根据PDF2zh说明文档&#xff0c;安装PDF2zh https://github.com/guaguastandup/zotero-pdf2zh/tree/v2.4.0 我没有使用conda&#xff0c;直接使用pip安装pdf2zh &#xff08;Python版本要求3.10 < version <3.12&#xff09; pip install pdf2zh1.9.6 flask pypd…

springboot3+vue3融合项目实战-大事件文章管理系统-更新用户密码

大致分为这三步 首先在usercontroller中增加updatePwd方法 PatchMapping ("/updatePwd")public Result updatePwd(RequestBody Map<String,String> params){//1.校验参数String oldPwd params.get("old_pwd");String newPwd params.get("n…

C++GO语言socket套接字

目录 01 06-socket-client-server通信过程分析 02 07-socket-server-单次处理 03 08-socket-client 01 09-socket-server-多连接建立 02 10-socket-client多次发送数据 01 -socket-client-server通信过程分析 ### - Server Demo接收一个链接&#xff0c;而且只能发送一次数…

WebSocket:实时通信的新时代

在现代Web应用中&#xff0c;实时通信变得越来越重要。传统的HTTP协议虽然能够满足基本的请求-响应模式&#xff0c;但在需要频繁更新数据的场景下&#xff0c;其效率和性能显得捉襟见肘。WebSocket协议应运而生&#xff0c;它提供了一种在单个TCP连接上进行全双工通信的机制&a…

IT/OT 融合架构下的工业控制系统安全攻防实战研究

1. 引言 随着工业 4.0 和智能制造的浪潮席卷全球&#xff0c;信息技术 (IT) 与运营技术 (OT) 的融合已成为不可逆转的趋势。这种融合旨在通过实时数据交换和分析&#xff0c;打破传统的信息孤岛&#xff0c;显著提升生产效率、优化决策、降低运营成本并增强市场竞争力。IT 系统…

基于Qt的app开发第六天

写在前面 博主是一个大一下的计科生&#xff0c;现在正在做C面向对象程序设计的课程设计&#xff0c;具体功能可以看本专栏的第一篇博客。 目前的进度是&#xff1a;配好MySQL驱动->设计完界面->实现各个界面的切换 这一篇博主要初步实现待办板块的功能&#xff0c;即新建…

npm create vite@latest my-vue-app 解读

背景发荧光的样式。 filter属性的学习&#xff1a;filter - CSS&#xff1a;层叠样式表 | MDN 复习一下em 组件的调用: 是msg让“ViteVue”显示出来的&#xff01;&#xff01; a标签的targte属性&#xff1a; 组件之间怎么传值的&#xff1a; &#xff0c;没看懂code标签怎么…

【SpringCloud GateWay】Connection prematurely closed BEFORE response 报错分析与解决方案

一、背景 今天业务方调用我们的网关服务报错: Connection prematurely closed BEFORE response二、原因分析 三、解决方案 第一步: 增加 SCG 服务的JVM启动参数,调整连接获取策略。 将连接池获取策略由默认的 FIFO&#xff08;先进先出&#xff09;变更为 LIFO&#xff08…

PD快充诱骗协议芯片XSP04D与主板共用一个Type-C和电脑传输数据

随着智能电子产品的广泛应用&#xff0c;快充方案越来越受到重视&#xff0c;且迭代次数也更加频繁。在一些使用频率较高、耗电较大的电子产品中&#xff0c;快充方案也成为了大多数人的追求&#xff0c;它能很大程度上缩短充电的时间&#xff0c;例如XSP04D这款快充诱骗协议方…

goland无法debug

goland无法使用debug&#xff0c;修复_goland无法debug-CSDN博客

ECLIC中断流程及实际应用 —— RISC-V中断机制(二)

在长期的嵌入式开发实践中&#xff0c;对中断机制的理解始终停留在表面层次&#xff0c;特别当开发者长期局限于纯软件抽象层面时&#xff0c;对中断机制的理解极易陷入"知其然而不知其所以然"的困境&#xff0c;这种认知的局限更为明显&#xff1b;随着工作需要不断…

【网络分析工具】网络工具wireshark、TCPdump、iperf使用详解

这里写目录标题 1. wireshark1.1. 过滤包1.2. 常见分析 2. tcpdump3. iperf 1. wireshark **ip.dst eq 10.0.0.21** 是用于网络流量分析工具&#xff08;例如 Wireshark 或 tcpdump&#xff09;的过滤器表达式。 它的作用是筛选出所有目标IP地址为 10.0.0.21 的数据包 IP.add…

debian中笔记本的省电选择auto-cpufreq

在reddit中&#xff0c;看评论区出现这个软件&#xff0c;于是打算尝试一下&#xff0c;应该能对不使用电源时笔记本的省电起到一定的作用。 https://github.com/AdnanHodzic/auto-cpufreq?tabreadme-ov-file#why-do-i-need-auto-cpufreq 作用 One of the problems with Linux…

力扣热题100之环形链表 II

题目 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使…

【记录】HunyuanVideo 文生视频工作流

HunyuanVideo 文生视频工作流指南 概述 本指南详细介绍如何在ComfyUI中使用腾讯混元HunyuanVideo模型进行文本到视频生成的全流程操作&#xff0c;包含环境配置、模型安装和工作流使用说明。 参考&#xff1a;https://comfyui-wiki.com/zh/install/install-comfyui/install-c…

SpringCloud之Ribbon基础认识-服务负载均衡

0、Ribbon基本认识 Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端 负载均衡的工具。 Ribbon 主要功能是提供客户端负载均衡算法和服务调用 Ribbon 客户端组件提供一系列完善的配置项如连接超时&#xff0c;重试等。 Ribbon 会基于某种规则&#xff08;如简单…

重生之我在2024学Fine-tuning

一、Fine-tuning&#xff08;微调&#xff09;概述 Fine-tuning&#xff08;微调&#xff09;是机器学习和深度学习中的一个重要概念&#xff0c;特别是在预训练模型的应用上。它指的是在模型已经通过大量数据训练得到一个通用的预训练模型后&#xff0c;再针对特定的任务或数据…

Selenium Web自动化测试学习笔记(一)

自动化测试 技术手段模拟人工&#xff0c;执行重复性任务&#xff0c;准确率100%&#xff0c;高于人工 selenium 可通过浏览器驱动控制浏览器&#xff0c;通过元素定位模拟人工&#xff0c;实现web自动化&#xff0c;没有焦点&#xff08;把浏览器放在最小化依然可以&#x…