【漫谈C语言和嵌入式002】嵌入式中的大小端

news2024/11/24 5:57:12

        在计算机科学中,"端序"(Endianness)是指多字节数据类型(如整数或浮点数)在内存中的存储方式。主要分为两种:大端模式(Big-Endian)和小端模式(Little-Endian)。

大端模式 (Big-Endian)

       在大端模式中,多字节数据类型的最高有效字节(MSB)被存储在最低的内存地址上,而最低有效字节(LSB)则被存储在最高的内存地址上。这种存储方式与人类通常读数的方式一致,因此有时也被认为是“自然”的顺序。

小端模式 (Little-Endian)

        在小端模式中,情况正好相反,最低有效字节(LSB)被存储在最低的内存地址上,而最高有效字节(MSB)则被存储在最高的内存地址上。

举例说明

        以一个16位无符号整数 0x1234(十进制为4660)为例,来看一下在大端模式和小端模式下,它在内存中的布局:

大端模式

        假设我们有一个支持大端模式的嵌入式系统,比如一个基于 ARM 的微控制器配置为大端模式。当我们将 0x1234 写入到内存时,它的存储方式如下:

  • 内存地址:0x0000 | 0x0001
  • 存储值: 0x12 | 0x34

        高位字节 0x12 被存储在最低的地址 0x0000 上,而低位字节 0x34 则被存储在较高的地址 0x0001 上。

小端模式

        现在假设我们有一个支持小端模式的嵌入式系统,例如一个 x86 架构的微控制器。当我们将 0x1234 写入到内存时,它的存储方式如下:

  • 内存地址:0x0000 | 0x0001
  • 存储值: 0x34 | 0x12

        低位字节 0x34 被存储在最低的地址 0x0000 上,而高位字节 0x12 则被存储在较高的地址 0x0001 上。

实际应用

        在嵌入式系统开发中,了解处理器的字节序是非常重要的,因为这直接影响到数据的处理和传输。例如,当你从串行接口接收数据时,如果你的处理器是小端模式的,而发送方是大端模式的,那么你可能需要在接收后重新排列字节的顺序才能正确解析数据。

如何判断大小端:

        可以定义一个整数变量,并将其设置为一个特定的值,然后通过比较该值的低位字节来确定系统的字节序。

#include <stdio.h>

int main() {
    // 定义一个整型变量,并给它赋一个特定的值
    int testValue = 0x01020304;

    // 使用 union 来访问整型变量的各个字节
    union {
        int asInt;
        char asChar[4];
    } byteUnion;

    byteUnion.asInt = testValue;

    // 检查最低位的字节
    if (byteUnion.asChar[0] == 0x01) {
        printf("This system is in Big-Endian mode.\n");
    } else if (byteUnion.asChar[0] == 0x04) {
        printf("This system is in Little-Endian mode.\n");
    } else {
        printf("Cannot determine endianness.\n");
    }

    return 0;
}

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

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

相关文章

星戈瑞FITC-DXMS荧光素标记地塞米松不同方向的应用

FITC-DXMS&#xff0c;全称异硫氰基荧光素-地塞米松&#xff0c;是一种创新的科研试剂。他是由FITC-NH2的&#xff08;-NH2&#xff09;氨基与地塞米松的-OH&#xff08;羟基&#xff09;结合。它结合了地塞米松的特性和荧光素的高灵敏度标记技术&#xff0c;为医药研究、生物医…

栈与括号匹配——20、636、591、32(简中难难)

20. 有效的括号&#xff08;简单&#xff09; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭…

springboot的学习(二):常用配置

简介 springboot的各种常用的配置。 springboot 项目是要打成jar包放到服务器上运行的。 打包 idea上使用maven打包的时候&#xff0c;会执行自动测试&#xff0c;可能会对数据库中的数据有影响&#xff0c;先点跳过测试&#xff0c;在点package。 运行 Windows上运行的…

新闻资讯小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;新闻类别管理&#xff0c;新闻信息管理&#xff0c;用户管理&#xff0c;管理员管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;新闻信息&#xff0c;我的 开发系统&a…

极市平台 | 如何通俗理解扩散模型?

本文来源公众号“极市平台”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;如何通俗理解扩散模型&#xff1f; 极市导读 还有谁没有看过diffusion的工作&#xff0c;席卷AI圈的diffusion到底是什么&#xff1f;本文作者用尽量通…

tcpdump快速入门及实践手册

tcpdump快速入门及实践手册 1. 快速入门 [1]. 基本用法 基本用法&#xff1a; tcpdump [选项 参数] [过滤器 参数] [rootkysrv1 pwe]# tcpdump -h tcpdump version 4.9.3 libpcap version 1.9.1 (with TPACKET_V3) OpenSSL 1.1.1f 31 Mar 2020 Usage: tcpdump [-aAbdDefhH…

Python爬虫使用实例

IDE&#xff1a;大部分是在PyCharm上面写的 解释器装的多 → 环境错乱 → error&#xff1a;没有配置&#xff0c;no model 爬虫可以做什么&#xff1f; 下载数据【文本/二进制数据&#xff08;视频、音频、图片&#xff09;】、自动化脚本【自动抢票、答题、采数据、评论、点…

3.2 实体-关系模型(ER模型)

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

Keycloak中授权的实现-转载

在Keycloak中实现授权&#xff0c;首先需要了解与授权相关的一些概念。授权&#xff0c;简单地说就是某个&#xff08;些&#xff09;用户或者某个&#xff08;些&#xff09;用户组&#xff08;Policy&#xff09;&#xff0c;是否具有对某个资源&#xff08;Resource&#xf…

基于SpringBoot的餐饮订单系统-计算机毕业设计源码39867

摘 要 随着现代生活节奏的加快和人们对便捷餐饮服务的需求不断增长&#xff0c;基于Spring Boot的餐饮订单系统的设计与实现成为当前研究的关键课题。本研究旨在开发一款包括首页、通知公告、餐饮资讯、餐饮菜单、商城管理等功能模块的系统&#xff0c;旨在提供便捷高效的餐饮订…

了解一下内测系统

内测系统是什么&#xff1f; 在软件或应用程序开发的过程中&#xff0c;供开发人员进行测试和调试的系统。 内测系统的作用是什么&#xff1f; 达到让用户使用游戏或者软件的时候体验感更好、减少风险、方便开发者更好的找到并解决自己软件中的问题。测试好后的app可以将自己的…

C ++ 也可以搭建Web?高性能的 C++ Web 开发框架 CPPCMS + MySQL 实现快速入门案例

什么是CPPCMS&#xff1f; CppCMS 是一个高性能的 C Web 开发框架&#xff0c;专为构建快速、动态的网页应用而设计&#xff0c;特别适合高并发和低延迟的场景。其设计理念类似于 Python 的 Django 或 Ruby on Rails&#xff0c;但针对 C 提供了更细粒度的控制和更高效的性能。…

Linux--传输层协议UDP

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) 两个问题 UDP 协议 UDP 协议端格式 UDP 的特点 面向数据报 UDP 的缓冲区 UDP 使用注意事项 基于 UDP 的应用层协议 进一步理解UDP协议 传输层 负责数据能够从发送端传输接收端. 再谈…

STM32F407ZET6使用LCD(9341)

1.原理图 屏幕是中景园2.8寸液晶屏&#xff0c;9341驱动不带触摸屏版本 2.STM32CUBEMX配置 3.编写驱动程序

【全国大学生电子设计竞赛】2021年K题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~

02 网络编程-UDP用户数据包协议

目录 一、UDP简介 二、UDP协议的通信流程 三、UDP相关API接口 &#xff08;1&#xff09;创建套接字-socket() &#xff08;2&#xff09;地址信息结构体sockaddr_in{} &#xff08;3&#xff09;地址转换接口 &#xff08;4&#xff09;发送消息sendto() &#xff08;…

谁偷偷看了你的网站?这两款统计工具告诉你!小白易上手~

前两天&#xff0c;上线了一个知识库网站&#xff1a;花了一天时间&#xff0c;搭了个专属知识库&#xff0c;终于上线了&#xff0c;手把手教&#xff0c;不信你学不会。 想知道这个网站的流量如何&#xff0c;怎么搞&#xff1f; 网站流量统计分析工具&#xff0c;了解下&a…

EmguCV学习笔记 C# 2.2 Matrix类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址&#xff1a;VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…

全面解析Gerapy分布式部署:从环境搭建到定时任务,避开Crawlab的坑

Gerapy分布式部署 搭建远程服务器的环境 装好带docker服务的系统 Docker:容器可生成镜像&#xff0c;也可拉去镜像生成容器 示例&#xff1a;将一个环境打包上传到云端(远程服务器)&#xff0c;其他8个服务器需要这个环境直接向云端拉取镜像生成容器,进而使用该环境,比如有MYS…

ElasticSearch读写性能调优

文章目录 ES写入数据过程ES读取数据的过程写数据底层原理提升集群读取性能数据建模优化分片 提升写入性能的方法服务器端优化写入性能建模时的优化降低Translog写磁盘的频率&#xff0c;但是会降低容灾能力分片设定调整Bulk 线程池和队列 ES写入数据过程 客户端选择一个node发…