news 2026/5/30 14:43:48

C语言——关于float型转为4个字节的格式(利用共用体)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言——关于float型转为4个字节的格式(利用共用体)

在单片机对外发送的时候我们经常需要将字节拼起来,但是有的数据是浮点型或者double类型,要将其转换为字节形式,方便数据进行校验值计算等操作。

#include "stdio.h"

union
{
float f;
uint8_t u[4];
}trans;

uint8_t datavalue[4];

//浮点转换
trans.f=angvel;
for(int i=0;i<4;i=0)
{
datavalue[i]=trans.u[i];
}

Uart4_Send(datavalue,4);

AI写代码
c
运行

————————————————
版权声明:本文为CSDN博主「老王WHH」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/whhcsdn233/article/details/144978895

嵌入式系统中通过共用体实现串口浮点型数据转换

01嵌入式系统串口数据传输

嵌入式系统的串口数据传输通常以字节为单位进行。然而,当传输某些特殊数据类型,例如浮点型数据时,其内存表示方式就变得复杂。浮点型数据,如float a=231.5,在内存中实际上是以特定的二进制形式存储的。在嵌入式系统中,当芯片访问这样的浮点型数据时,它会一次性读取4个字节,并按照浮点型数据的表示规定进行转换,从而得到我们熟悉的十进制可读数据。

但当我们从串口接收到4个字节的数据,例如{0x43, 0x67, 0x80, 0x00},如何将这些字节数据转换为float型呢?直接将这4个字节赋给一个float变量是不行的,这就是串口通讯中经常遇到的问题。为了解决这个问题,我们可以使用共用体结构体来处理这种特殊的数据转换。

► 浮点型数据的问题

嵌入式系统中,浮点型数据以特定二进制形式存储,直接从串口接收的字节数组不能直接赋给float变量。当我们从串口接收到4个字节的数据时,例如{0x43, 0x67, 0x80, 0x00},我们需要一种方法来将这些字节数据转换为float型。

通过观察和测试,我们可以定义一个包含float类型和unsigned char数组的共用体,通过这样的共用体,可以方便地将串口接收到的4个字节数据转换为float型。

► 使用共用体的方法

对于共用体方法,我们可以这样定义:

```c

typedef union {

float f;
unsigned char s[4];

} FloatUnion;

```

这里,我们定义了一个包含float类型和unsigned char数组的共用体。通过这个共用体,我们可以方便地将串口接收到的4个字节数据转换为float型。

在这个共用体定义中,float类型的f和unsigned char数组s[4]是共享同一块内存区域的。当我们给f赋值为231.5时,可以通过观察s[4]的数值来验证这一点。为了更好地理解这个过程,我们可以编写一个简单的测试程序,利用VS的监视窗来查看s[4]的值。以下是一个可能的测试程序示例:

```c

// 共用体定义

typedef union {

float f;
unsigned char s[4];

} Union_test;

int main() {

Union\_test test;
test.f = 231.5; // 给float类型的成员赋值
// 在此处,我们可以利用调试工具(如VS的监视窗)来查看s[4]的值,以验证内存共享的效果。
return 0;

}

```

通过这个测试程序,我们可以清晰地看到,float类型的f和unsigned char数组s[4]确实是共享同一块内存区域的。当我们给f赋一个值时,这个值会直接反映在s[4]上,反之亦然。这种特性使得我们能够灵活地处理串口接收到的字节数据,将其转换为float型或其他数据类型。

► 小端存储的影响

同样地,我们进行了结构体实验,将数组s[4]={0x00,0x80,0x67,0x43}的首地址s[0]强制转换为结构体z的地址并赋值,最终打印结果仍为231.5。这表明,原本应存储为0x4367_8000的数据在实际存储时变为了00H 80H 67H 43H。

这背后的原因是计算机系统采用了小端存储方式。那么,什么是小端存储呢?简单来说,当数据超过一个字节时,其存储需要跨越多个字节。不同的机器在存储时会有不同的顺序选择。有些机器会从最低有效字节开始存储,逐渐向最高有效字节过渡,这种方式被称为小端存储;而另一些机器则相反,从最高有效字节开始,逐渐降低至最低有效字节,这种方式被称为大端存储。

以十六进制数0x01234567为例,其字节的存储顺序便取决于所使用的机器。

https://baijiahao.baidu.com/s?id=1846464818222825175&wfr=spider&for=pc

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 23:29:14

QQ音乐加密格式转换完全指南:告别播放限制,享受音乐自由

QQ音乐加密格式转换完全指南&#xff1a;告别播放限制&#xff0c;享受音乐自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&…

作者头像 李华
网站建设 2026/5/29 15:05:13

小白必看!Flowise可视化AI助手搭建全流程解析

小白必看&#xff01;Flowise可视化AI助手搭建全流程解析 1. 为什么你需要Flowise&#xff1a;一个不用写代码的AI工作流工厂 你有没有过这样的时刻&#xff1a; 看到别人用RAG把公司文档变成智能问答系统&#xff0c;心里痒痒想试试&#xff1b; 听说LangChain能连数据库、调…

作者头像 李华
网站建设 2026/5/22 12:45:02

WAV还是MP3?不同格式对识别效果影响实测

WAV还是MP3&#xff1f;不同格式对识别效果影响实测 在实际语音识别项目中&#xff0c;我们常遇到一个看似简单却影响深远的问题&#xff1a;音频格式到底重不重要&#xff1f;很多人想当然地认为“只要能播放就行”&#xff0c;但真实场景中&#xff0c;一段用手机录的MP3会议…

作者头像 李华
网站建设 2026/5/18 16:09:57

存算融合加速开发瓶颈突破(C语言指令集封装黄金框架首次公开)

第一章&#xff1a;存算融合加速开发瓶颈突破&#xff08;C语言指令集封装黄金框架首次公开&#xff09; 在传统冯诺依曼架构下&#xff0c;数据搬运开销持续吞噬算力红利&#xff0c;尤其在嵌入式AI、实时信号处理与边缘推理场景中&#xff0c;内存墙问题导致高达73%的周期浪费…

作者头像 李华
网站建设 2026/5/23 16:27:34

告别静音干扰!用FSMN-VAD快速实现长音频智能分割

告别静音干扰&#xff01;用FSMN-VAD快速实现长音频智能分割 你是否遇到过这样的问题&#xff1a;一段30分钟的会议录音&#xff0c;真正说话的内容可能只有12分钟&#xff0c;其余全是咳嗽、翻纸、停顿和环境噪音&#xff1f;手动剪辑不仅耗时&#xff0c;还容易漏掉关键语句…

作者头像 李华