【嵌入式C】数据的大小端存储与数据格式转换

news2024/10/5 21:18:04

【嵌入式C】数据的大小端存储与数据格式转换

目录

  • 1. 大小端存储格式图解
  • 2. 数据类型转换函数
    • 2.1 u8数组转u16
    • 2.2 u16数转u8数组

资料:【嵌入式数据传输及存储的C语言实现】

Cortex-M内核为例,实际应用中大部分内核都是 **小端 **存储,以STM32为例,全部都是小端,而且是芯片设计之初就固化进去的,不可修改

1. 大小端存储格式图解

通俗的将:

  • 大端:低字节存储在高地址,高字节存储在低地址
  • 小端:低字节存储在低地址,高字节存储在高地址 低低,高高
    在这里插入图片描述

2. 数据类型转换函数

u8 数组与 u16 数值的转换

在这里插入图片描述

2.1 u8数组转u16

//  uModeFlag:  1  big-endian    0: little-endian
uint16_t u8Arry2u16(uint8_t *pBuffer, uint8_t uModeFlag)
{
    uint16_t uShort = 0;
	uShort = *pBuffer++;
    if(1 == uModeFlag){
		uShort = (uShort << 8) | (*pBuffer);
	}else if(0 == uModeFlag){
		uShort |= (*pBuffer) << 8;
	}
	return uShort;	
}

// 测试
uint8_t arry[2] = {0xC0,0x01};
uint16_t value;
value = u8Arry2u16(arry,1);   // 大端,输出 0xC001
printf("0x%04x, ",value);

value = u8Arry2u16(arry,0); // 小端,输出 0x01c0
printf("0x%04x, ",value);

在这里插入图片描述

2.2 u16数转u8数组

//  uModeFlag:  1  big-endian    0: little-endian
void u16_to_u8_Arry(uint16_t srcdata,uint8_t *destdata,uint8_t uModeFlag)
{
    switch (uModeFlag)
    {
        case 1:{
            *(destdata) = (uint8_t)(srcdata >>8 & 0xFF); 
            *(destdata +1)    = (uint8_t)(srcdata & 0xFF); 
            break;
        }

        case 0:{
            *(destdata+1) = (uint8_t)(srcdata >>8 & 0xFF); //
            *destdata     = (uint8_t)(srcdata & 0xFF); // 
            break;
        }
        default:
            break;
    }
}

// 测试
    uint16_t val = 0xc001;

    u16_to_u8_Arry(val,arry,1);
    printf("0x%02x,",arry[0]);
    printf("0x%02x, \r\n ",arry[1]);   // 0xc0 0x01

    u16_to_u8_Arry(val,arry,0);
    printf("0x%02x,",arry[0]);
    printf("0x%02x, \r\n ",arry[1]);   // 0x01,0xc0

在这里插入图片描述

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

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

相关文章

艺海泛舟——尹星从艺六十年作品展暨学术交流首展作品(一)

简历&#xff1a; 1944年1月25日出生于山西省阳高县&#xff0c;内蒙古师范学院艺术系美术专业&#xff0c;师从水彩之父李剑晨&#xff0c;北京京华美术学院创立者邱石冥&#xff0c;徐坚。与吴冠中&#xff0c;朱德群&#xff0c;赵无极&#xff0c;杨飞云是同门。擅长&…

windows系统bat脚本命令总结之EnableDelayedExpansion

前言 做了一段时间的bat脚本开发&#xff0c;bat脚本中有各种各样的命令跟传统的编程逻辑完全不同&#xff0c;本专栏会讲解下各种各式的命令使用方法。 本篇文章讲解的是EnableDelayedExpansion的使用。 EnableDelayedExpansion简介 EnableDelayedExpansion是用于在批处理脚本…

开发提测前测试的目的是什么

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

为什么修改IP和隐藏IP地址?修改IP地址带来哪些好处?

随着互联网的普及&#xff0c;越来越多的人开始依赖网络进行日常生活和工作。然而&#xff0c;在上网过程中&#xff0c;我们的IP地址是暴露无遗的&#xff0c;这就有可能导致一些安全问题。因此&#xff0c;修改IP和隐藏IP地址的需求应运而生。那么&#xff0c;为什么要修改IP…

【深度学习实验】图像处理(三):PIL——自定义图像数据增强操作(随机遮挡、擦除、线性混合)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. PIL基础操作2. Cutout&#xff08;遮挡&#xff09;2.1 原理2.2 实现2.3 效果展示 3. Random Erasing&#xff08;随机擦除&#xff09;3.1 原理3.2 实现3.3 效果展示 4. Mixup&…

Spring-Mybatis源码解析--手写代码实现Spring整合Mybatis

文章目录 前言一、引入&#xff1a;二、准备工作&#xff1a;2.1 引入依赖2.2 数据源的文件&#xff1a;2.1 数据源&#xff1a; 2.3 业务文件&#xff1a; 三、整合的实现&#xff1a;3.1 xxxMapper 接口的扫描&#xff1a;3.2 xxxMapper 接口代理对象的生成&#xff1a;3.2 S…

分享83个简历竞聘PPT,总有一款适合您

分享83个简历竞聘PPT&#xff0c;总有一款适合您 83个简历竞聘PPT下载链接&#xff1a;https://pan.baidu.com/s/1iybRAisgWgXhelE1tGpzBw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整…

java学习part25多线程

132-多线程-程序、进程、线程与并行、并发的概念_哔哩哔哩_bilibili 1.概念 2.共享内容 只有线程间能通信&#xff0c;进程之间不共享内容。 3.继承thread的多线程 相当于golang里先写一个线程函数run(),子类对象调用start()相当于go关键字 相当于go run() package thread;/…

Target、沃尔玛撸卡、采退支付下单如何避免账号关联风险?

近年来&#xff0c;随着跨境电商平台的日益繁荣&#xff0c;越来越多的国内卖家涌入其中&#xff0c;导致竞争异常激烈。为了在竞争中脱颖而出&#xff0c;一些卖家采用自动脚本程序进行浏览和下单&#xff0c;然而这种行为很容易导致账号被批量关联、封号。本文将探讨养号下单…

算法面试题--树与对象数组的转化

1. Array -> Tree var arr [{ id: 12, parentId: 1, name: "朝阳区" },{ id: 241, parentId: 24, name: "田林街道" },{ id: 31, parentId: 3, name: "广州市" },{ id: 13, parentId: 1, name: "昌平区" },{ id: 2421, parentId:…

Java核心知识点整理大全24-笔记

22. 数据结构 22.1.1. 栈&#xff08;stack&#xff09; 栈&#xff08;stack&#xff09;是限制插入和删除只能在一个位置上进行的表&#xff0c;该位置是表的末端&#xff0c;叫做栈顶 &#xff08;top&#xff09;。它是后进先出&#xff08;LIFO&#xff09;的。对栈的基…

2023.11.12 阿里云产品全线故障

阿里云 11.12 故障原因曝光&#xff1a;访问密钥服务 (Access Key) 异常 (baidu.com) 故障原因竟然是因为生成白名单代码逻辑缺陷。

皮肤警告,羊大师讲解身体与环境的默契

皮肤警告&#xff0c;羊大师讲解身体与环境的默契 我们常常忽视身体皮肤所承受的压力和警告信号。皮肤是身体的第一道屏障&#xff0c;也是与外界环境直接接触的组织。我们的皮肤通过各种方式向我们传达信息&#xff0c;警告我们关于身体健康的重要问题。本文小编羊大师将带大…

堆栈_队列实现栈

//请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 // // 实现 MyStack 类&#xff1a; // // // void push(int x) 将元素 x 压入栈顶。 // int pop() 移除…

外汇天眼:CFTC修订了针对Logista Advisors的投诉

商品期货交易委员会&#xff08;CFTC&#xff09;修改了对Logista Advisors LLC及其首席执行官Andrew Harris Serotta的投诉。修改后的投诉于2023年11月28日提交给伊利诺伊州北区法院。 修改后的投诉声称&#xff0c;从至少2020年1月左右至少到2020年4月左右&#xff0c;Logis…

whatsapp信息群发脚本开发!

WhatsApp 作为全球广受欢迎的通讯应用&#xff0c;在我们的日常生活中扮演着重要角色&#xff0c;有时候&#xff0c;我们需要向大量联系人发送消息&#xff0c;比如营销推广、活动通知等。 一个个手动发送消息?那简直太落后了!今天&#xff0c;我们将探讨如何利用脚本开发实…

使用JAVA语言写一个排队叫号的小程序

以下是一个简单的排队叫号的小程序&#xff0c;使用JAVA语言实现。 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class NumberingSystem {public static void main(String[] args) {Queue<String> queue new LinkedList<…

探索使用Quarkus和MicroProfile 构建Kubernetes原生微服务的秘诀!

Kubernetes Native Microservices with Quarkus and MicroProfile 是一个基于Kubernetes原生微服务的开发框架&#xff0c;它结合了Quarkus和MicroProfile的优点&#xff0c;提供了一个高效、可扩展、易于管理的微服务解决方案。 Quarkus是一个针对Java虚拟机&#xff08;JVM&…

企业计算机服务器中了mallox勒索病毒如何解密,mallox勒索病毒文件恢复

随着网络技术的不断发展&#xff0c;网络安全威胁也在不断增加&#xff0c;勒索病毒攻击企业计算机服务器的事件时有发生&#xff0c;并且勒索病毒的加密形式也越来越复杂。近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计算机服务器遭到了mallox…

配电室无人值守方案

配电室无人值守一种应用先进技术实现配电室自动化运行、实时远程监控和管理的解决方案。力安科技配电室无人值守&#xff0c;加装小安值班机器人或边缘网关&#xff0c;完成配电室智能化升级&#xff0c;依托电易云&#xff0c;构建智慧配电室及运维系统。 设备选型和安装&…