0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

串口传输数据时,结构体如何转换?

Q4MP_gh_c472c21 来源:嵌入式专栏 作者:嵌入式专栏 2022-04-08 09:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式系统的串口数据传输都是以字节为单位,但是有些特殊的数据类型,比如浮点型float a=231.5,在内存是如何表示的呢?

我们知道浮点型float数据类型占用4个字节,实际上在内存当中a=0x43678000,只是嵌入式芯片访问a时,知道a是浮点型数据,所以一次性读取4个字节,而且也按照浮点型的数据表示规定,将a转换为十进制的可读数据231.5。

如果我们从串口接收到4个字节数据{0x43,0x67,0x80,0x00},如何把这4个字节的数据转换为float型呢?

直接令float a=0x43678000这是不行的(不信的读者可以自行验证),这就是串口通讯当中经常遇到的问题,如果数据传输中包括了浮点型数据,在这里我们可以通过共用体或者结构体来解决。

对于共用体:

typedefunion
{
floatf;
unsignedchars[4];
}Union_test;

f的4个字节和s[4]的4个字节是共用一个区域,如果我们令f=231.5,然后通过VS的监视窗查看s[4]的数值,下面是测试程序:

#include
//共用体
//floatf;//4个字节
//chars[4];//4个字节
typedefunion
{
floatf;
unsignedchars[4];
}Union_test;
typedefstructst
{
floatf1;
}Struct_test;
voidmain(void)
{
floata=231.5;
Union_testx;
Struct_testz;
x.f=a;
z=*(Struct_test*)(&(x.s));
printf("z=%.2f
",(double)z.f1);
printf("Endofthisprogramme
");
}

监视结果如下所示:

8a680a3a-b6ba-11ec-aa7f-dac502259ad0.jpg

我们同样适用结构体做了相同的实验,将数组s[4]={0x00,0x80,0x67,0x43}的首地址s[0]强制转换赋值给结构体z,最后打印输出的结果也是231.5

这里我们看到原本应该是0x4367_8000的数据实际存储的时候变成了00H 80H 67H 43H,这是因为计算机系统使用了小端存储,什么是小端存储呢?

我们都知道,对于一个超过一个字节的数据,其在计算机中的存储需要跨越字节。某些机器选择在存储器中按照从最低为有效字节到最高有效字节的顺序存储对象,而另一些机器则按照从最高为有效字节到到最低为有效字节的顺序存储,前一种存储方式被称为小端存储,后一种方式被称为大端存储。

举个例子,对于十六进制数0x01234567,其字节的存储顺序便依赖于机器,如下:

8a7c3104-b6ba-11ec-aa7f-dac502259ad0.png我们可以通过下面的函数测试是大端存储还是小端存储:
voidtest(void)
{
inta=1;
unsignedchar*start=&a;
if(*start==1)
printf("小端存储");
elseif(*start==0)
printf("大端存储");
}

审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式芯片
    +关注

    关注

    4

    文章

    243

    浏览量

    28354
  • 串口
    +关注

    关注

    15

    文章

    1607

    浏览量

    81945
  • 传输数据
    +关注

    关注

    1

    文章

    127

    浏览量

    16464

原文标题:串口传输数据时,结构体如何转换?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    typedef结构使用

    虽然结构的出现能够让我们有一个更科学的数据结构来管理数据,但是每次使用结构都需要struct
    发表于 12-08 07:04

    为什么不建议用匿名结构

    说起匿名结构,想必大家第一感觉就是看着好高大上的名字,但实际上也就那样。 typedef struct { union { struct { uint8_t bit_0:1
    发表于 12-04 07:39

    CW32L052在串口数据传输中丢包怎么解决?

    CW32L052在串口数据传输中丢包
    发表于 11-24 07:35

    C语言结构使用

    有时候需要将不同类型的数据组合为一个整体,以便于引用。例如,一名学生有学号、姓名、性别、年龄等属性,如果针对每个属性都单独定义一个变量,那么当有多名学生时变量就难以分清。结构就是用来管理不同类
    发表于 11-12 08:30

    使用MCU200T开发板的UART口进行数据传输

    ;amp;gt;Source->Drivers文件夹里可以看到。 完成uart口初始化后,我们开启中断发送使能。 根据链路状态寄存器LSR的状态判断是否有数据从UART口传输
    发表于 10-28 08:16

    串行通信接口的结构和功能

    串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体
    的头像 发表于 10-17 09:39 3549次阅读
    串行通信接口的<b class='flag-5'>结构</b>和功能

    【RA4M2-SENSOR】串口传输MPU6050陀螺仪数据测评

    RA4M2串口传输MPU6050陀螺仪数据测评 1. 套件概述 RA4M2-SENSOR 是一款基于 RA4M2 系列微控制器的评估套件,支持 TrustZone 技 术和片内安全加密引擎(SCE
    发表于 09-14 11:41

    外部晶振在USB转串口模块的应用

    在工业设备、嵌入式系统以及各类专业仪器中,串口通信依然是关键的数据传输方式。为适应现代计算机,USB 转串口模块应运而生。可将 USB 接口转换为传统的
    的头像 发表于 08-12 17:28 1019次阅读
    外部晶振在USB转<b class='flag-5'>串口</b>模块的应用

    智嵌物联串口转光纤转换器-延长串口通信距离,增强抗干扰性能

    智嵌物联研发的串口光纤收发器是将RS-485/422/RS232接口信号转换为光纤接口传输,通信距离可达20Km,大大延长串口的通信距离以及抗干扰性能。设备可自适应
    的头像 发表于 06-27 17:08 486次阅读
    智嵌物联<b class='flag-5'>串口</b>转光纤<b class='flag-5'>转换</b>器-延长<b class='flag-5'>串口</b>通信距离,增强抗干扰性能

    串口网关是什么

    、MQTT等),实现串口设备与网络之间的互联互通。它解决了传统串口设备无法直接接入网络的问题,是工业物联网(IIoT)和智能设备管理中的关键组件。 核心功能 协议转换串口
    的头像 发表于 06-05 11:31 548次阅读

    GLAD应用:全息光栅模拟

    用于模拟全息记录介质中形成的梯度折射率分布。全息结构一旦形成,就可以在传输过程中将一束入射光波逐渐转换成形成体全息结构的另一束光波。两束光
    发表于 05-15 09:32

    程序设计与数据结构

    《程序设计与数据结构》重点阐述了三大方向内容: 1. C语言学习中的痛点:针对当前工程师在C语言学习中的痛点,如指针函数与函数指针,如何灵活应用结构等。从变量的三要素(变量的类型,变量的值和变量
    发表于 05-13 16:45

    C语言中结构与联合体的深度解析:内存布局与应用场景

    一、基础概念与核心差异 1.1 结构(Struct)的本质 **结构是C语言中实现数据封装的基石,其核心特征在于内存独立性。每个成员变量
    发表于 04-08 09:18

    如何通过串口将8路adc采集的数据传输给上位机显示

    处理模块data_dispose把采集的八路数据转换为电压数据,并且转换为BCD编码。uart_byte模块选择对应通道的数据发送给
    的头像 发表于 03-14 09:09 1295次阅读
    如何通过<b class='flag-5'>串口</b>将8路adc采集的<b class='flag-5'>数据传输</b>给上位机显示

    串口通信原理解析 串口与并口的区别

    在计算机硬件和通信领域,串口(Serial Port)和并口(Parallel Port)是两种常见的数据传输接口。它们在数据传输方式、速度、应用场景等方面有着明显的区别。 串口通信原
    的头像 发表于 12-27 09:50 3256次阅读