大小端总结

浅谈大小端(Endian)与位域 多次从坑中爬出来后对大小端的知识总结 阅读详情

1)先记一句话

  • 大端(Big-endian):高位字节在前(先看到“大的那一头”)

  • 小端(Little-endian):低位字节在前(先看到“小的那一头”)

  • 这里的“前/后”,指的是内存低地址→高地址的排列顺序,或者你抓到的字节流从左到右的顺序。

假设一个 16-bit 数:
0x005E(十进制 94)

它拆成两个字节:

  • 高位字节(MSB)= 0x00

  • 低位字节(LSB)= 0x5E

大端存放(网络字节序常用)

内存从低地址到高地址是:

地址:   +0    +1
字节:  00    5E
你看到的字节流就是:00 5E

小端存放(x86/ARM 常见)

内存从低地址到高地址是:

地址:   +0    +1
字节:  5E    00
✅  “结合网络中的 00 5E”:
如果这是网络包里的字段(比如端口、长度、协议字段等),一般按网络字节序=大端解释,那就是 0x005E = 94。

3)用 32 位数举例(工程里最常见)

假设 32-bit:0x12345678

拆成字节:12 34 56 78

大端(MSB在前)

12 34 56 78
小端(LSB在前)

78 56 34 12


小端 CPU 的规则是:低地址放低位字节。

以 0x12345678 为例,小端内存布局(低地址→高地址):

  • 低地址:78(最低有效字节)

  • 高地址:12(最高有效字节)

5)为什么要 “read_u16_be / read_u32_be” 这种读取?

因为CPU 内存端序和协议字节序可能不一致:

  • 协议/网络包:常用 大端(network byte order)

  • 你的 CPU:大概率 小端

所以不能直接把 buf 强转成 uint16_t* 读(会受端序、对齐影响),要按协议规定把字节拼起来。

static inline uint16_t read_u16_be(const uint8_t* p) {
    return (uint16_t(p[0]) << 8) | uint16_t(p[1]);
}
它明确表示:buf[0] 是高位,buf[1] 是低位(大端解释)。

举例:p = {0x00, 0x5E}

(0x00<<8) | 0x5E = 0x005E = 94

6)工程级常见场景举例

场景 A:TCP/UDP 端口字段

网络包里端口是 16 位大端。
抓到:00 50 → 0x0050 = 80(HTTP)

场景 B:长度字段

抓到:01 F4
按大端:0x01F4 = 500

如果你在小端 CPU 上不转换,直接读可能会变成 0xF401(完全错)。

7)最后一句工程级总结

小端 CPU:低地址放低位;
大端 CPU:低地址放高位。
协议解析时永远不要“相信 CPU 的端序”,而要自己按字节拼。

【网络编程系列】:字节顺序的大端与小端表示法 如果用IBM等大尾端机器,则没有这种字节顺序转换,但为了程序的可移植性,也最好用这个函数。的首地址传递给了Java程序,由于Java采取 Big Endian 方式存储数据,很自然的它会将你的数据翻译为。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。如果你写的程序只在单机环境下面运行,并且不和别人的程序打交道,那么你完全可以忽略字节序的存在。在几乎所有的机器上,多字节对象都被存储为连续的字节序列。,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序。 阅读详情

相关推荐

C语言中的大小端

文章目录1.什么是大小端2.大小端的意义3.如何确定大小端3.1使用联合体来检测 1.什么是大小端 大小端是内存存储字节的两种方式,一个是大端存储,一个是小端存储。采用大小模式对数据端进行存放的主要区别在于存放的字节顺序,大端方式将高位存放在低地址,小端方式将高位存放在高地址。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。 大端存储:就是把一个数的低位字节序的内容存放到高地址处,高位字节序的内容存放在低地址处。 小端存储:就是把一个数的低位字节序的内容存放到低地址处

weixin_45137562的博客 7155

什么是大小端?怎么分辨大小端?

大小端是针对非单字节数据的存取,比如short型,int型等。大端存储是将数据的高位存储在内存的低地址处,小端存储是将数据的低位存储在内存的低地址处。

m0_58250087的博客 3万+

【C++】什么是大小端,如何判断大小端

文章目录什么是大小端大小端与操作系统有关嘛如何判断大小端方法一方法二 什么是大小端 大小端也可以理解为字节顺序,或者端序、尾序,就是大端序(Big-Endian)、小端序(Little-Endian)。 1.大端模式:是指数据的高字节保存在内存的低地址中; 2.小端模式:是指数据的高字节保存在内存的高地址中; 例如0x12345678 大小端与操作系统有关嘛 大小端与操作系统是没有关系的 大小端主要有用于存储的顺序,与存储器(硬件)关系比较大 编译器和操作系统仅仅是配合CPU编译好相应的代码,而

风铃的博客 4533

一文看懂计算机中的大小端(Endianess)

本文主要探讨计算机中大小端的相关概念以及如何进行大小端的判断和转换等。

Mr_Jaychong的博客 1万+

正确区分大小端模式

正确区分大小端模式 嵌入式开发经常会遇到大小端的问题,往往学习后,过一段时间就又忘记了,这里总结一下,希望给大家留下深刻的记忆。 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端和大端两种字节顺序,这两种你只需要深刻地记住其中的一种就可以,另一种恰好和它相反,不需要刻意记忆了,那么我们就记住“大端模式”吧。 大端模式(Big-Endian):是指数据的高字节保存在内存的...

papership的博客 6028

达梦数据库集群部署(主备)

达梦数据库集群部署(主备)

m0_71845127的博客 1461

C语言再学习-- 大端小端详解(转)

参看:详解大端模式和小端模式 一、什么是大端和小端 所谓的大端模式,就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 所谓的小端模式,就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 简单来说:大端——高尾端,小端——低尾端 举个例子,比如数字 0x12 34 56 78在内存中的表示形式为: 1)大端模式: 低地址 -----------------...

不积跬步,无以至千里 3万+

STM32解析航模遥控器的PPM信号

使用STM32对航模遥控器的PPM信号进行解析

qq_44343584的博客 9734

C语言:大小端模式、判断大小端、大小端转换

对于一个存储空间大于 1 个字节的数据,在内存中有两种存储模式, 大端模式 (big-endian):数据的高字节在内存的低地址存放,数据的低字节在内存的高地址存放 小端模式 (little-endian):数据的高字节在内存的高地址存放,数据的低字节在内存的低地址存放。判断主机字节序 (主机大小端),可以用联合体(union),指针,强制转换成 char 类型等方法。用位操作进行大小端转换,在网络编程中,也可以使用 htonl, htons, ntohl, ntohs 等函数。

天道酬勤 2万+

【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere

银河麒麟作为国家核高基专项的重要成果,国防版凭借其卓越的安全性和可靠性,已成为军工领域的首选操作系统。之前我们在适配麒麟V4国防版的过程中已发现诸多安全性要求,而麒麟V10国防版在安全防护等级上又达到了更高的级别。本文将主要演示离线部署,因为军工项目基本不会出现联网场景。即使在线,也可以按离线方式部署,且离线部署由于有私有仓库,不会存在镜像获取不到和丢失情况。

jiaworld的博客 730

论文理解【LLM-OR】——【SIRL】Solver-Informed RL: Grounding Large Language Models for Authentic Optimization M

本文提出第一种针对基于 LLM 的 OR 问题建模和求解任务的 RLVR 方法,其基于求解器得到可验证奖励,设计了 Partial KL 强化目标函数和两阶段奖励课程训练方法,达成了 SOTA 性能

佚失的诗篇 880

什么是大小端?如何确定大小端?

一、什么是大小端? 对于一个由2个字节组成的16位整数,在内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;另一种方法是将高序字节存储在起始地址,这称为大端(big-endian)字节序。 假如现有一32位int型数0x12345678,那么其MSB(Most Significant Byte,最高有效字节)为0x12,其LSB...

wwwlyj123321的博客 12万+

Day470&471.Netty概述&Netty高性能架构设计 -netty

Netty概述 一、原生 NIO 存在的问题 NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。 JDK NIO

阿昌爱Java 1572

什么是大小端,数组大小端,位域大小端,结构体大小端

什么是大小端,数组大小端,位域大小端,结构体大小端

linux,单片机,杂记 5467

YOLO格式数据集划分

YOLO格式的数据集划分 标题标签格式txt import os import cv2 import random from PIL import Image # os.makedirs('labels_train') # os.makedirs('labels_val') img_train_path ='./img_train/' #图片训练集保存路径 img_val_path = './img_val/' #图片验证集保存路径 labels_train_path = './labels_t

weixin_51154380的博客 3308

GLM-4本地部署的实战教程

本文主要介绍了GLM-4-9B本地部署的实战教程,希望对学习和使用大模型的同学们有所帮助。 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 2.3 下载模型文件 3. 运行glm-4-9b-chat

herosunly的博客 25万+

STM32的大小端模式——什么是大小端模式?

目录什么是大小端模式为什么会有大小端模式之分什么情况需要考虑大小端模式常见的设备的大小端模式测试大小端模式例程 什么是大小端模式 大端模式Big-Endian:高字节存于内存低地址,低字节存于内存高地址。 小端模式Little-Endian:低字节存于内存低地址,高字节存于内存高地址。 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。 首先我们来看下数据在大小端两种模式下存储图,假设有一个整型数0x12345678,从图中可以看出明

a只如初见的博客 1万+

基于Qt C++开发一套大疆农业无人机的AI飞控系统

如果需要补充**多机协同作业代码**、**农田测绘数据导出**、**作业数据统计大屏**或**移动端地面站适配**功能,可以告知具体需求,我会针对性完善。"开启" : "关闭") << "喷洒,流量:" << flowRate << "L/min";emit errorOccurred(QString("SDK初始化失败,错误码:%1").arg((int)ret));report += QString("问题区域数量:%1\n").arg(info.problemAreas.size());

寒寒豆豆软件公司的博客 382

大小端问题

大小端问题     最近工作中,有两次遇到大小端问题,所以花时间写这篇日志,总结一下。 1.      实际需求          (1) 前段时间写了一个修复损坏的gzip文件的tool,在Linux Server上编译运行没有问题。但是在Solaris Server上运编译运行,结果总是和预期的不一致,跟踪发现是由大小端问题导致的;         (2) 最近在写一个跨平台的

yasaken 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

详解处理器的大小端存储,及数据传输中的大小端

为什么会有大小端?分析:在32位的处理器中一个int数据类型的变量有4个字节,比如 int32_t = 0xaabbccdd,那么问题来了,在内存中它是这么存储的了?是aa在低地址还是dd的在低地址了?其实都可以,不同的架构采用的存储方法不一样,如此便引入了大小端的概念。本质:大小端是对多字节数据类型的概念;单字节数据类型我就一个字节就存在低地址就好了,无所谓大小端。

qq_43298413的博客 2185

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

位域与大小端

C中的位域与大小端问题(整理自网上资料) 字节内也是有大小端问题,与字节中的大小端类似: 1)little endian中的位应该这样排列:  01234567  即排在前面的是低位。因此,先分配least significant bits  2)而在Big endian中,位应该这样排列:  76543210  即排在前面的是高位。因此,先分配most significan

qk835320459的专栏 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

计算机大小端以及大小端查看

数据在计算机中存储的时候,分为大端存储和小端存储,每个计算机的大小端存储都不同,为了了解自己的机器中的大小端类型,可以通过很多方法查看。这里我们主要讲解两种查看大小端的方法。 那么到底什么是大小端呢? 大端存储是 数据的低位存储在高地址处 小端存储是 数据的低位存储在低地址处 我个人在理解的时候,将大小端的存储理解为数据在存储的时候,可以分为从内存的 低到高 存储和从 高到低 存储,也可以理解为从内存的头部开始存储和从尾巴开始存储,这样就可以理解了吧。从头开始存...

【欢迎关注公众号:冬瓜白】 2247

大小端理解

在介绍大小端之前,需要区分两个概念,数据表示和数据存储。数据表示计算机底层的数据都是二进制数据位0和1,8个bit组成一个字节,而字节是计算机处理的最小单元,每一个存储地址单元会存储一个字节,连续的的多个存储单元可以存储一个字和双字,具体取决于OS的位宽,见表1;对于多个字节的字和双字本身,就存在符号位、高低数据位的概念,见表2和图1;系统类型字(Word)的字节数双字(Double Word)的字节数16 位系统2432 位系统4864 位系统816表1系统类型符号位。

qq_40642828的博客 1413

大小端介绍、查看及转换

Big-Endian(大端字节序):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端(符合人们日常阅读习惯); Little-Endian(小端字节序):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

保持一颗永远好奇、勇于探索的心 3165

C++ 大小端

本文介绍了计算机系统中的大小端字节序概念及其判断方法。小端字节序将数据的低位存储在低地址,而大端字节序则相反。通过联合体和指针两种方法可以判断系统字节序,如利用联合体共享内存特性或指针类型转换检查首字节值。不同架构处理器(如x86小端、PowerPC可配置、ARM默认小端但可切换)的字节序差异可能导致跨平台数据解析错误和文件兼容性问题。解决方法包括网络通信中使用标准字节序转换函数(htonl/ntohl等)和文件处理时自定义字节序转换函数。这些策略确保了不同平台间数据传输和文件读写的正确性。

chenglin19930430的博客 1282

【C语言】大小端

大小端是计算机存储多字节数据的两种字节序:大端模式将高位字节存于内存低地址(如0x12345678按0x12、0x34、0x56、0x78顺序存储),小端模式则相反,低位字节存于低地址(如0x78为首字节)。该差异源于处理器对多字节数据存储方式的不同需求,大端便于快速判断数据符号,小端利于强制类型转换。通过指针读取整型变量首字节(如int a=1时首字节为1则为小端)或共用体共享内存特性可判断机器字节序,其本质是数据高低位字节在内存中的存放顺序差异,直接影响跨平台数据传输与处理的兼容性。

LiuYaoheng的博客 1923
上一篇: Lambda 表达式
下一篇: 为什么要用线程池(C++)?
怕什么真理无穷
博客等级 码龄10年 415粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值