单片机中利用Union联合体打印输出浮点数(小数)

2023-05-16

方法一:指针

    UART串口有一个缺点,就是发送和接受是一个字节一个字节的接收,如果发送的浮点数那可怎么办啊?

    有人会说,那就一个字节一个字节发送啊。那么,我先定义一个double data。32位机中,一个double类型占8个字节,也就是说data需要拆分8块通过UART发送。

    现在只有一个变量,那么就声明一个指针指向这个变量吧

    double *p;

    p = &data;

    p会将8个字节当成一个整体,这样p+1就不能指向下一个字节的地址了

    那么如果我将p强转成 unsigned char *呢?或者我们声明一个unsigned  char * 指向这个data

    unsigned char *q;

    q = (unsigned char *)p;

    那么串口发送就用一个for循环就够了


 for(i=0;i<8;i++)
 {
    send(*(q+i));
 }  

    接收方先用一个数组将数据从低位开始接收,再使用一个double指针强行指向数组头就行了,下面这段代码是模拟串口发送前后数据拆分组合的过程

vs2010

方法二:联合体

    方法一太繁琐了,有没有简单点的办法?

    利用联合体(共同体)有多简单?


#include "stdafx.h"
#define MAX_LENTH 8
union U1
{
    char s[MAX_LENTH];
    double d;
};
 
union U2
{
    char s[MAX_LENTH];
    double d;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    U1 u1;
    U2 u2;
    int i=0;
 
    u1.d = 2.111;
    u2.d = 3.00;
    printf("u1.d = %lf\n",u1.d);
    printf("u2.d = %lf\n",u2.d);
    printf("Send Data...");
 
    for(i=0;i<MAX_LENTH;i++)
    {
        u2.s[i] = u1.s[i];
    }
 
    printf("u2.d = %lf\n",u2.d);
    while(getchar()=='q');
    return 0;
}
  

方法一简直就是浪费脑力啊!

vs2010结果

 

    为什么联合体会这么神奇呢?

    因为它的所有成员相对于基地址的偏移量都为0

    也就是说

    双精度浮点数地址 &u1.d 与数组首地址 u1.s是一样的

 

    其实方法一的方法和联合体的思想是一样的,利用了数组保存接收的数据(数据的实质就是内存存储二进制),将一个指向double的指针指向这份数组的首地址,那么我们通过取值符号*将这份数据完好无缺的读出来了啊!只不过联合体中double的地址就是数组首地址 ,不需要像方法一那样强转!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机中利用Union联合体打印输出浮点数(小数) 的相关文章

  • PMP项目管理考点-合同类型(转)

    PMP项目管理考点 合同类型 PMP项目管理考点 合同类型 FP T amp M CPF CPPC CPFF CPIF FPIF 甲方 xff08 买方 xff09 受利最大到最小的合同类型依次为 FP gt FPIF gt CPIF gt
  • SOCKADDR_IN

    一 sockaddr和sockaddr in在字节长度上都为16个BYTE xff0c 可以进行转换 struct sockaddr unsigned short sa family 2 char sa data 14 14 上面是通用的s
  • Java调用webApi接口,接口需要令牌验证Authorization

    Java调用webApi接口 xff0c 接口需要令牌验证Authorization 需要的包post方式 没了 需要的包 1 commons httpclient 3 1 jar 2 dom4j 1 6 1 jar post方式 span
  • [转]驱动中获取进程完整路径名

    Submitted by boxcounter on 2009 July 23 6 55 PM windows编程 R0 在OSR上无意中看到一篇文章 xff0c 关于获取进程完整路径的 贴过来 xff0c 最后有一点小调整 原文地址 xf
  • 第4章 项目管理一般知识

    文章目录 4 1 2 项目目标 xff08 成果性目标 约束性目标 xff0c SMART原则 xff0c 优先级 层次性 xff09 4 1 3 项目的特点 xff08 临时性 独特性 渐进明细 xff09 4 1 4 信息系统集成项目的
  • 第5章 项目立项管理

    文章目录 5 1 项目建议5 1 1 项目建议书 5 2 项目可行性分析5 2 1 项目可行性研究 内容 xff08 7个 xff1a 投资 技术 财务 组织 经济 社会 风险因素及决策 xff09 5 2 2 项目可行性研究 阶段 xff
  • 第6章 项目整体管理

    文章目录 项目整体管理6个过程6 2 项目整体管理实现过程项目章程的 作用 xff08 四定经计联 xff09 制定项目章程的 输入1 项目工作说明书 xff08 SOW xff09 2 商业论证 xff08 决定项目是否值得投资 xff0
  • 第7章 项目范围管理

    文章目录 7 1 项目范围管理概念7 1 1 项目范围管理的 含义 及 作用7 1 2 项目范围管理的主要 过程 xff08 6个 xff1a 编收定创确控 xff09 7 2 编制 范围管理计划编制范围管理计划过程的输出1 范围管理计划2
  • 第8章 项目进度管理

    文章目录 8 1 规划项目进度管理项目进度管理计划 8 2 定义活动8 2 3 定义活动的输出 xff08 活动清单 活动属性 里程碑清单 xff09 8 3 排列活动顺序8 3 2 排列活动顺序的工具与技术1 前导图法 xff08 PDM
  • 第9章 项目成本管理

    文章目录 9 1 1 成本与成本管理概念项目成本管理的过程 9 1 2 相关术语成本的类型 xff08 6种 xff09 应急储备与管理储备 9 2 3 项目成本管理计划制订的 输出9 3 1 项目成本估算的主要相关因素项目估算还需要考虑但
  • 第10章 项目质量管理

    文章目录 10 1 2 质量管理及其 发展史10 1 3 项目质量管理 xff08 包括 xff1a 规划质量管理 实施质量保证 质量控制 xff09 10 2 3 规划质量管理 的工具与技术1 成本效益分析法2 质量成本法 xff08 一
  • 第11章 项目人力资源管理

    文章目录 项目人力资源管理 过程11 2 1 编制项目人力资源计划的工具与技术 xff08 1 xff09 层次结构图 xff08 工作 组织 资源 分解结构 xff09 xff08 2 xff09 矩阵图 xff08 责任分配矩阵 xff
  • 第12章 项目沟通管理和干系人管理

    文章目录 沟通渠道计算 xff08 M 61 n n 1 2 xff09 12 1 2 沟通的方式沟通管理计划的编制过程12 2 2 制订沟通管理计划的工具4 沟通方法 xff08 交互式 推式 拉式 xff09 12 3 2 管理沟通的工
  • 第13章 项目合同管理

    文章目录 13 2 1 按信息系统 范围 划分的合同分类1 总承包合同2 单项工程承包合同3 分包合同 13 2 2 按项目 付款方式 划分的合同分类1 总价合同2 成本补偿合同 xff08 卖方有利 xff09 3 工料合同 13 3 1
  • FS-Cli常用命令简介

    目录 退出操作 日志与显示操作 全局变量 fsctl xff1a 发送控制信息 通话相关命令简介 show xff1a 显示信息 fs cli是FreeSWITCH的一个客户端连接程序 xff0c 可以方便地查看运行情况 xff0c 并对其
  • 第14章 项目采购管理

    文章目录 采购管理包括如下几个过程14 2 编制采购计划编制采购计划的输出1 xff09 采购管理计划2 xff09 采购工作说明书3 xff09 采购文件 14 2 3 工作说明书 xff08 SOW xff09 14 3 实施采购14
  • 第15章 信息(文档)和配置管理

    文章目录 软件文档的分类 xff08 1 xff09 开发文档 xff1a 描述开发过程 本身 xff08 2 xff09 产品文档 xff1a 描述开发过程的 产物 xff08 3 xff09 管理文档 xff1a 记录项目管理的信息 文
  • 第16章 变更管理

    文章目录 16 1 项目变更的基本概念16 1 1 项目变更的含义16 1 2 项目变更的分类16 1 3 项目变更产生的原因 16 2 变更管理的基本原则16 3 变更管理角色职责与工作程序16 3 1 角色职责16 3 2 工作程序 1
  • 第17章 信息系统安全管理

    文章目录 信息安全属性及目标 xff08 1 xff09 保密性 xff08 Confidentiality xff09 xff08 2 xff09 完整性 xff08 Integrity xff09 xff08 3 xff09 可用性 x
  • 第18章 项目风险管理

    文章目录 18 1 2 风险的分类按照性质划分 xff08 纯粹 投机 xff09 按照产生原因 xff08 自然 社会 政治 经济 技术 xff09 18 1 3 风险的性质 xff08 客观 偶然 相对 社会 不确定 xff09 项目风

随机推荐

  • 第19章 项目收尾管理

    文章目录 19 1 项目验收 xff08 1 xff09 验收测试 xff08 2 xff09 系统试运行 xff08 3 xff09 系统文档验收 xff08 4 xff09 项目终验 19 2 项目总结 xff08 属于项目收尾的 管理
  • 第20章 知识产权管理、第21章 法律法规和标准规范

    文章目录 20 1 2 知识产权的特性 58420 2 1 著作权及邻接权 58520 2 2 专利权 58920 2 3 商标权 59221 3 诉讼时效 59921 6 3 标准分级与标准类型 60321 7 2 信息系统集成项目管理常
  • 系统集成项目管理工程师 下午 真题 及考点(2022年四套卷)

    文章目录 2022年下半年试题一 xff1a 第10章 项目质量管理 xff0c 流程图 核查表 帕累托图 xff0c 7种质量工具 xff0c 一致性成本和非一致性成本 xff0c 质量保证和质量控制试题二 xff1a 第8章 项目进度管
  • 系统集成项目管理工程师 下午 真题 及考点(2021年上下半年)

    文章目录 2021年下半年试题一 xff1a 第18章 项目风险管理 xff0c 风险应对策略 xff0c 风险的性质 xff08 客观 偶然 相对 社会 不确定 xff09 试题二 xff1a 第9章 项目成本管理 xff0c 执行绩效
  • 系统集成项目管理工程师 下午 真题 及考点(2020年下半年)

    文章目录 2020年下半年试题一 xff1a 第10章 项目质量管理 xff0c 规划质量管理过程的输入试题二 xff1a 第9章 项目成本管理 xff0c 典型 xff1a EAC 61 AC 43 ETC 61 AC 43 xff08
  • FreeSWITCH之lua脚本事件订阅

    目录 相关接口简要说明 Even EventConsumer pop获取事件 bind订阅 代码示例 事件创建 事件订阅 FreeSWITCH中通过订阅事件 xff0c 我们能获取到各种实时信息 xff0c 进而可以对通话进行精确的控制 在
  • 超级基础A*寻路教程

    download code resource 学习了一下A 算法 xff0c 但是天生对算法无奈 xff0c 还好一不小心找到下面这篇文章 如果你苦于无法理解网上各大牛人的巅峰讨论以及他们火星文般的源代码 xff0c 那么这篇文章实在是太适
  • Cannot find module ‘body-parser‘

    node modules下模块缺失 解决方案 xff1a npm install span class token operator span save body span class token operator span parser
  • C#中struct和class的区别

    本文详细分析了C 中struct和class的区别 xff0c 对于C 初学者来说是有必要加以了解并掌握的 简单来说 xff0c struct是值类型 xff0c 创建一个struct类型的实例被分配在栈上 class是引用类型 xff0c
  • 沁恒MCU串口使用指南

    转载注明出处 沁恒MCU串口使用指南 xff1a 适用于WCH的32位MCU和CH559 558单片机 只描述TTL电平的TX 43 RX形式的常规串口 xff0c 流控 xff0c RS232 RS485不在文章涉及范围之内 大部分8位机
  • ubuntu安装网络调试助手

    下载mNetAssist安装包 链接 https pan baidu com s 1eHalZSnsVKXRERmIOCfj0w 提取码 bhxs新建终端并切换到安装包所在目录sudo dpkg i mNetAssist release a
  • .s19 文件转换为 .hex 和 .bin文件的方法

    使用STVD开发时 xff0c 编译后产生的是 s19 文件 xff0c 与Keil 和 IAR常见的 hex bin文件不同 xff0c 那么如何将 s19文件转换为常见的文件格式呢 xff1f 一 获取工具 burner 下载链接 xf
  • VS Code中C/C++ 无法跳转到定义的解决办法

    VS code的跳转功能一直很迷 xff0c 时好时坏 xff0c 有些新的工程环境干脆用不了 经过一遍遍的baidu加上自己的摸索 xff0c 总结出一套经验 xff0c 应该可以解决大部分的情况了 一 首先 xff0c 当然是安装插件了
  • 使用void*强转函数指针(编辑中)

    别把函数名当成函数 xff0c just a 变量 typedef void AirCb void 空回调函数 typedef int aimFunction int para1 char para2 int para3 要传递的目标函数
  • KoroFileHeader 配置

    一 安装插件 二 Github 地址 https github com OBKoro1 koro1FileHeader 三 快速上手 https github com OBKoro1 koro1FileHeader wiki E5 AE 8
  • 网络接入与身份认证简介

    目录 1 认证简介 2 常见认证机制 基于口令的身份认证机制 挑战 响应认证机制 EAP认证机制 3 公钥认证机制 4 使用认证机制的认证协议 RADIUS认证协议 TACACS 43 认证协议 Kerberos认证协议 LDAP协议 5
  • VS Code常见问题

    1 更改自动补全 xff08 联想 xff09 快捷键的方法 文件 gt 首选项 gt 键盘快捷方式 搜索trigger 找到该选项 xff0c 更改快捷键 2 当鼠标悬停在枚举值上 xff0c 不能显示当前序号 a 打开setting j
  • 用Keil编译C51和ARM时,分别生成.Bin文件的方法

    一 C51 1 使用srec cat exe a Keil工程需生成 hex文件 b 将srec cat exe放在工程路径中任意文件夹下 c 新建一个文本文档 xff0c 之后填写如下内容 xff0c 保存后更名为 1 bat xff08
  • Keil新建Stm32标准工程中 Preprocessor Symbols的作用

    xff08 转自正点原子的回复 xff09 标准的工程新建办法 是要添加 34 USE STDPERIPH DRIVER STM32F10X HD的 USE STDPERIPH DRIVER 是告诉编译器 我们需要使用标准库了 实际上是 c
  • 单片机中利用Union联合体打印输出浮点数(小数)

    方法一 xff1a 指针 UART串口有一个缺点 xff0c 就是发送和接受是一个字节一个字节的接收 xff0c 如果发送的浮点数那可怎么办啊 xff1f 有人会说 xff0c 那就一个字节一个字节发送啊 那么 xff0c 我先定义一个do