news 2026/10/31 11:45:47

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/10/30 23:56:48

QwQ-32B开源镜像+ollama:32B中等规模推理模型的教育行业落地案例

QwQ-32B开源镜像ollama&#xff1a;32B中等规模推理模型的教育行业落地案例 你有没有遇到过这样的场景&#xff1a;一位中学物理老师想为学生定制一套“错题归因分析报告”&#xff0c;但手动梳理每道题背后的知识漏洞、思维卡点和认知偏差&#xff0c;平均要花40分钟&#xf…

作者头像 李华
网站建设 2026/10/28 16:46:24

小白福音!Qwen3-Embedding-0.6B图文部署教程

小白福音&#xff01;Qwen3-Embedding-0.6B图文部署教程 1. 这个模型到底能帮你做什么&#xff1f; 你可能已经听过“嵌入”这个词&#xff0c;但未必清楚它在实际工作中意味着什么。简单说&#xff1a;Qwen3-Embedding-0.6B 是一个能把文字变成数字向量的“翻译官”——不是…

作者头像 李华
网站建设 2026/10/29 21:44:07

用YOLOv9镜像完成首次训练,过程太丝滑

用YOLOv9镜像完成首次训练&#xff0c;过程太丝滑 刚把YOLOv9镜像拉起来&#xff0c;敲下第一行训练命令&#xff0c;看着GPU显存瞬间被填满、loss曲线平稳下降、终端里滚动着每轮的mAP指标——整个过程没有报错、不用改路径、不调版本冲突、不等权重下载。这种“输入命令→看…

作者头像 李华
网站建设 2026/10/28 23:20:29

AD画PCB高速PCIE布线规范与检查清单

以下是对您提供的技术博文《AD画PCB高速PCIe布线规范与检查清单:信号完整性工程实践指南》的 深度润色与专业重构版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然、老练、有工程师现场感 ✅ 摒弃所有模板化标题(如“引言”“总结”“展望”),代之以…

作者头像 李华
网站建设 2026/10/23 2:20:46

Qwen3-0.6B真实案例:在1GB内存设备成功运行

Qwen3-0.6B真实案例&#xff1a;在1GB内存设备成功运行 [【免费下载链接】Qwen3-0.6B Qwen3&#xff08;千问3&#xff09;是阿里巴巴集团于2025年4月29日开源的新一代通义千问大语言模型系列&#xff0c;涵盖6款密集模型和2款混合专家&#xff08;MoE&#xff09;架构模型&am…

作者头像 李华
网站建设 2026/10/29 18:51:15

BBDown免费工具零基础B站视频下载完全指南

BBDown免费工具零基础B站视频下载完全指南 【免费下载链接】BBDown Bilibili Downloader. 一款命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 你是否遇到过想保存B站精彩视频却找不到合适工具的困境&#xff1f;那些珍贵的学习教程、创意…

作者头像 李华