字节序Big Endian和Little Endian

PCIE基础知识一 (1)PCI的工作频率分为33MHz和66MHz,最大吞吐率266MB/s;(2)PCIE 1.0 x1 的吞吐率就达到250MB/s。 阅读详情

开发中我们需要注意硬件上的内存存放的顺序,Big Endian和Little Endian,俗称大端还是小端

比如对32位4字节的值,0x00000001,如果是Little Endian,它是从低到高的存放顺序,先存低字节,后存高字节,

也就是说,它在内存中的存放顺序是 0x01 0x00 0x00 0x00(地址里面存放的值)。


图像数据一般是UInt8的像素类型,优化时我们常用一个策略是4个字节一起处理,转换成一个DWord类型(32位)再存放。

那么在将4个UInt8类型的值串成一个Dword类型时,为了保证在内存里面与原来单像素执行保持一致,就需要注意嵌入式系统是大端或小端。

假如,4个相邻的像素值分别是0x12,0x34,0x56,0x78,它们本身在内存里面排列是 0x12 0x34 0x56 0x78

如果用位移的方式把这4个像素值串成一个Dword值,0x12345678,那么在Little-Endian模式下,它在内存里面存放的就是 0x78 0x56 0x34 0x12,

与优化之前的值不一致,所以在Little-Endian模式下,就要把4个像素值串成 0x78563412,这样才能与优化前保持一致。


如果是Big-Endian模式,情况刚好与Little-Endian对等。


那么,如何判断嵌入式系统是大端还是小端呢?简单的办法就是取一个32位的数值,然后取它的地址里面的第一个字节,检查一下这个Byte值。

比如,long i = 0x01; char *ck = (char *)&i; (编译器要确保long是32位)

如果是Little-Endian,那么取首地址的第一个字节,*pk = 1,因为它先存低字节,后存高字节,也就是第一个字节的值是0x01。

而Big-Endian下,*pk = 0。这样就可以判断系统的大端和小端。不过每次执行的时候都需要一个if语句检查,是比较繁琐的。


所以,建议优化代码最好写成独立于这种判断的。

 
注意,上面用强制类型转换是行不通的,比如 char ck = (char)i; 这样得到的ck值仍然是1。
强制类型转换与类型本身在内存上的存放方式无关,它是将32位的0x00000001的低16位赋值给ck,舍弃高16位。
也就是说,它是对数据本身的高低位截取,而与存放方式无关。



 
2.4.2 PCIe——物理层——字符序列 物理层定义了一系列的字符集,这些字符根据规则排序组成了物理层数据包。 阅读详情

相关推荐

YOLOv8验证的命令以及计算coco指标

好久不看代码,都不知道怎么验证的了,来记录一下。1、计算coco指标。

毕竟是Shy哥 1481

PCIe 是什么 ? -- 基本知识

1. 概述 1)PCIe(Peripheral Component Interconnect Express)是继ISA和PCI总线之后的第三代I/O总线。一般翻译为周边设备高速连接标准。 2)PCIe协议是一种端对端的互连协议,提供了高速传输带宽的解决方案。目前PCIe已经发展到第四代PCIe4.0, 每一代的发展,最明显的特征就是速率翻倍。 3)是Intel公司1991年推出的。批准组织:PCI SIG (PCI兴趣小组) 4)一个x16插槽可以运行x1、x2、x...

老鹏 10万+

操作系统笔记(含王道计算机考研——操作系统课件)

操作系统(OS) 笔记根据B站王道计算机考研——操作系统视频整理所得,视频链接:https://b23.tv/0I2qex 视频中所用课件:链接:https://pan.baidu.com/s/101bFWm0Tv0emNpEneidYPA 提取码:y3dd 1.计算机系统概述 1.简介 什么是操作系统? 操作系统(Operating Ststem, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是

拧发条鸟的博客 6万+

PCIe物理层详细总结-PCIe专题知识(一)

本文主要对PCIe物理层的组成、功能进行详细的总结,通过图文的方式方便读者快速掌握。物理层是PCIe总线的最底层,将PCIe设备连接在一起。PCIe总线的物理电气特性决定了PCIe链路只能使用端到端的连接方式。PCIe总线的物理层为PCIe设备间的数据通信提供传送介质,为数据传送提供可靠的物理环境,发送端数据链路层(Data Link Layer)的DLLP和TLP报文通过物理层(Physical Layer)发送至接收端的物理层,再传送至接收端的数据链路层。

Luckiers的博客 1万+

【AI智能体】Codex 开发聚合搜索应用项目实战操作详解

Codex 开发聚合搜索应用项目实战操作详解

congge 3096

YOLOv11改进策略【Head】| AFPN渐进式自适应特征金字塔,增加针对小目标的检测头(附模块详解和完整配置步骤)

一、本文介绍 本文利用AFPN对YOLOv11的网络模型进行优化提升。AFPN采用渐近式融合及自适应空间融合操作。通过渐近式架构,逐步整合不同层级特征,有效避免非相邻层级间因语义差距过大导致的信息丢失或降级问题,确保在多尺度特征融合过程中既能保留高层语义信息,又能融入低层细节特征。本文将AFPN应用于YOLOv11中,并配置了针对小目标的检测头,能显著增强模型对不同尺度目标的检测能力,使其在复杂场景下更聚焦于目标物体特征,减少背景等无关信息的影响。 专栏目录:YOLOv11改进目录一览 | 涉及卷积层、

Limiiiing的博客 2718

PCIE3.0基础说明(PCI Express Base Specification Revision 3.0 by PCI-SIG)笔记——第二章:事务层说明(1)

文章目录2.事务层说明2.1. 事务层概述2.1.1. 地址空间、事务类型和用法2.1.1.1.内存事务2.1.1.2. I/O事务2.1.1.3.配置事务2.1.1.4.消息事务2.1.2.数据包格式概述2.2.事务层协议:数据包定义2.2.1.常见的数据包头部域2.2.2. 带数据负载的TLP:规则2.2.3 TLP摘要规则2.2.4 路由和寻址规则2.2.4 路由和寻址规则 2.事务层说明 2.1. 事务层概述 下图为事务层在PCIE整体结构中的示意图 从一个较高的层级来看,事务层所涉及的关键内容

weekman93的专栏 5298

基于ESP32和OV5640的目标检测系统

本文详细介绍了基于ESP32-S3和OV5640摄像头构建目标检测系统的完整方案。系统采用YOLOv8-Nano轻量级模型,通过INT8量化实现边缘部署,在UXGA分辨率下达到25fps帧率。文章从硬件选型、图像采集优化、模型量化部署、实时推理流水线构建等维度展开,重点解决了内存管理、电源稳定性和异常处理等嵌入式系统关键问题。该方案在资源受限条件下实现了150ms以内的端到端延迟,为物联网视觉应用提供了低成本、低功耗的解决方案,适用于智能家居、工业检测等多个场景。

reset2021的博客 329

大小端字节序(Big Endian和Little Endian)

那么何为字节序(Endia)呢? Big Endian是指低地址存放最高有效字节(MSB),而Little Endian则是低地址存放最低有效字节(LSB)。 大端模式 所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 例子: 0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000 0000440: b

熊浪的博客 6958

Lammps实现结冰匀相成核

Lammps实现结冰匀相成核

Rockyoung 3846

深入解析逆时偏移(RTM)算法及其在C++中的实现

逆时偏移(Reverse Time Migration, RTM)是一种高级地震成像技术,广泛应用于地震勘探中。RTM通过逆时传播波场来构建地震子波,能够提供更高分辨率和更精确的地下构造图像。本文将详细介绍RTM的基本原理,并通过C++代码示例,深入解析如何实现和优化RTM算法。希望这篇文章能够为地球物理学家和C++开发者提供有价值的参考。

qq_38334677的博客 1529

什么是Little Endian和Big Endian?(Endianness:字节序、端序、尾序)

当数据在网络传输或磁盘存储时,都是以字节为单位,而每字节占8bit;那多字节数据如int,以什么顺序读写字节、如何组装成最终输出的数据呢?

reading-conference-writing 8608

LoRa学习:LoRa通信调制解调的实现原理与性能

LoRa学习:LoRa调制解调原理与性能 1、LoRa调制解调器原理 LoRa调制解调器采用专利扩频调制和前向纠错技术。与传统的FSK、OOK调制技术相比,LoRa扩大了无线通讯链路的覆盖范围(实现了远距离无线传输),提高了链路的鲁棒性。。 开发人员可调整扩频因子和纠错率这两个参数,从而平衡通讯时的带宽占用、通信速率、空中包的存活时间、以及抗干扰性等。。 LoRa调制解调器...

HowieXue 薛永浩的博客 3万+

字节序 big endian 和 little endian

Big-Endian 和 Little-Endian 字节排序 字节排序                                                               含义 Big-Endian                                                   一个Word中的高位的Byte放在内存

Leeiee的专栏 895

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

字节序 Little-Endian和Big-Endian

网络字节顺序[1]  字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。 在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian,引用标准的Big-Endian和L

发展是曲折的但也是前进的 1789

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

字节序:Big Endian 和 Little Endian

字节序 字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序。 在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如:如果C/C++中的一个int型变量 a 的起始地址是&a = 0x100,那么 a 的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置。 根据整数 a 在连续的 4 byte 内存中的存储顺序,字节序被分为大端序(Big Endian) 与 小端序(Little Endian)两类。 然后就牵涉出两大CPU派系: Motorola

OceanStar的博客 9009

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

字节序——Big Endian和Little Endian

一、Endian 的起源 在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编/译码从而导致通信失败。 1980 年,Danny Cohen 在其著名的论文”On Holy Wars and a Plea for Peace”中为了平息一场关于在消息中字节该以什么样的顺序进行传送的争论而引用了该词。该文中,Cohen 非常形象贴切地

相守之路 3173

[J2SE]两种字节序:Big Endian和Little Endian

<br />今天搜到的一个知识,分享 一下。<br /> <br />1.故事的起源<br /><br />       “endian”这个词出自《格列佛游记》 。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。<br />       我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”(我宁可称为“大字节序”与“小

Sodino的专栏 2903

什么是大端字节序(Big Endian)和小端字节序(Little Endian)?

大端字节序(Big Endian)和小端字节序(Little Endian)是描述多字节数据在内存中如何布局的术语。这两种字节序的主要区别在于多字节数据的高位字节和低位字节在内存的存储顺序。字节序的重要性字节序在数据在不同计算机系统之间传输时尤为关键。如果发送方和接收方的计算机字节序不同,不经转换直接发送数据可能会导致接收方解析错误。所以在网络协议中,通常规范了数据的字节序,比如TCP/IP协议规定,网络传输时数值采用大端字节序。

咖啡程序员 3504

大端字节序和小端字节序问题(big-endian & little-endian)

转载来源:http://hi.baidu.com/michael1517/blog/item/12ff4dd3a5478d2e960a1631.html          谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel

MJ的技术空间 3150

计算机 Little-Endian 和 Big-Endian (大小字节序、大小端)

一、概念 endian:字节存储顺序,端模式。 Little-Endian 和 Big-Endian表示的是计算机字节顺序,所谓的字节顺序指的是长度跨越多个字节的数据的存放形式(若只有一个字节则不需考虑字节序的问题)。对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而Little endian 则相反,

小泽再沐风 1623

big endian和little endian字节序

这个概念在学S3C2440时已经接触过,在这里再啰嗦下加深印象: CPU通常分为大端模式和小端模式。谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。无独有偶,所有网络协议也都是采用big endian的方式来

工匠若水 1571

[C#]大小端字节序(Big Endian和Little Endian)

字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有两种字节顺序,根据他们所处的位置我们分别称为主机节序和网络字节序。 网络协议都是采用Big Endian的方式来传输数据的,所以有时我们也会把Big Endian方式称之为网络字节序。 通常我们认为网络字节序为标准顺序,封包的时候,将主机字节序转换为网络字节序,拆包的时候要将网络字节序转换为主机字节序。 Big endia...

csdn_5200的博客 2431

关于字节序Big Endian和Little Endian

关于字节序 字节序指的是一个大于2个字节的类型的数据例如int 、long等在内存中的字节顺序。 字节序分为:网络字节序 (Big Endian) 比如 0x11223344 ,占四个字节,那么他的网络字节序在内存中就是 按照 44 33 22 11 排列,也就是Big Endian是低位存储在内存的低地址,高位存储在内存的高地址。 主机字节序 (Littlr Endian) 比如 0

Programmer小卫 1597
上一篇: Windows系统下获取一段函数执行的时间
下一篇: 一些英文词的标准缩写
carpinter
博客等级 码龄19年 26粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值