此文章是在modbus数据格式转换上所做的修改,不仅可以用于保持寄存器,也可以用于其他自定义的u16类型的数组

common.h 头文件
#ifndef __COMMON_H
#define __COMMON_H
#include "sys.h"/*浮点数与IEEE754格式转换*/
typedef union
{float f_Buf;  //小数u8  uc_Buf[4];  //u8,用于存放IEEE754类型的小数u16 us_Buf[2];  //u16,用于将IEEE754类型的小数存放到保持寄存器中u32 u_Buf;
}float_DtformConver; void vUint16ConvertFloat(u16 *usData,float *fData);// 2个u16类型的数合成一个float
void vFloatConvertUint16(u16 *usRdata,float fData);//一个float变成2个Uint16
void vUint16ConvertUint32(u16 *usWdata,u32 *uData);//2个u16类型的数合成一个U32
void vUint32ConvertUint16(u16 *usRdata,u32 uData);//一个U32变成2个Uint16
void vUint16ConvertString(u16 *usWdata,u8 *Rstr,u16 uNBytes);//将u16类型的数据内容放入字符串中
void vStringConvertUint16(u16 *usRdata,u8 *Wstr,u16 uNBytes);//将字符串放入u16类型的数组中
#endif
common.c 文件
#include "common.h"
/**
* @file   vUint16ConvertFloat
* @brief  2个u16类型的数合成一个float
* @param usWdata u16数据首地址  fData 小数接收指针
* @retval
* @date  2021/8/13
*/
void vUint16ConvertFloat(u16 *usWdata,float *fData)
{float_DtformConver unTemp;/*第一种方式*/
//  unTemp.uc_Buf[0] = (u8 )(usData[0]&0xff);
//  unTemp.uc_Buf[1] = (u8 )(usData[0]>>8);
//  unTemp.uc_Buf[2] = (u8 )(usData[1]&0xff);
//  unTemp.uc_Buf[3]= (u8 ) (usData[1]>>8);/*第二种方式*/unTemp.us_Buf[0] = usWdata[0];//低16位unTemp.us_Buf[1] = usWdata[1];//高16位*fData = unTemp.f_Buf;//获取小数值
}/**
* @file   vFloatConvertUint16
* @brief  一个float变成2个Uint16
* @param  usRdata u16数据首地址  fData 小数值
* @retval
* @date  2021/8/13
*/void vFloatConvertUint16(u16 *usRdata,float fData)
{float_DtformConver unTemp;unTemp.f_Buf = fData;/*第一种方式*/
//  usData[0] = unTemp.uc_Buf[0];
//  usData[0] |= (u16)unTemp.uc_Buf[1] <<8;
//  usData[1] = unTemp.uc_Buf[2];
//  usData[1] |= (u16)unTemp.uc_Buf[3] <<8;/*第二种方式*/usRdata[0] = unTemp.us_Buf[0];usRdata[1] = unTemp.us_Buf[1];}/**
* @file   vUint16ConvertFloat
* @brief  2个u16类型的数合成一个U32
* @param  usData u16数据首地址  ulData接收指针
* @retval
* @date  2021/8/13
*/
void vUint16ConvertUint32(u16 *usWdata,u32 *uData)
{float_DtformConver unTemp;/*第一种方式*/
//  unTemp.uc_Buf[0] = (u8 )(usData[0]&0xff);
//  unTemp.uc_Buf[1] = (u8 )(usData[0]>>8);
//  unTemp.uc_Buf[2] = (u8 )(usData[1]&0xff);
//  unTemp.uc_Buf[3]= (u8 ) (usData[1]>>8);/*第二种方式*/unTemp.us_Buf[0] = usWdata[0];//低16位unTemp.us_Buf[1] = usWdata[1];//高16位*uData = unTemp. u_Buf;//获取u32值
}/**
* @file  vUint32ConvertUint16
* @brief  一个U32变成2个Uint16
* @param usRdata 接收数据首地址 uData 整数值
* @retval
* @date  2021/8/13
*/void vUint32ConvertUint16(u16 *usRdata,u32 uData)
{float_DtformConver unTemp;unTemp.u_Buf = uData;usRdata[0] = unTemp.us_Buf[0];usRdata[1] = unTemp.us_Buf[1];
}/**
* @file   vUint16ConvertString
* @brief  将u16类型的数据内容放入字符串中
* @param  usWdata u16写入数组 Rstr 以u8来接收字符串的数组  usNBytes 字节数
* @retval
* @data   2021/8/13
*/
void vUint16ConvertString(u16 *usWdata,u8 *Rstr,u16 usNBytes)
{u8 i ,j;i =j =0;while(i <  usNBytes){if((i%2)==0 )//如果没有余数,则表示是在低8位Rstr[i++]= (u8)(usWdata[j] &0xff);//得到低8位elseRstr[i++] = (u8)(usWdata[j++]>> 8);//得到高8位}}
/**
* @file   vStringConvertUint16
* @brief  将字符串放入u16类型的数组中
* @param  usRdata u16接收数组 Wstr 要写入的字符串数据   usNBytes 字节数
* @retval
* @data   2021/8/13
*/
void vStringConvertUint16(u16 *usRdata,u8 *Wstr,u16  usNBytes )
{u16 i,j;i = j =0;while(i <  usNBytes){if((i%2) == 0) usRdata[j] = Wstr[i++];//第一个字符放入,低8位else usRdata[j++]  |= (u16)Wstr[i++]<<8;第二个字符放入,高8位}
}

将U16类型转换成u32,float,u8字符串相关推荐

  1. c语言 u16 printf,C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/float)(全)...

    u16 首先必须知道u8,s8等数据类型的定义: typedef signed char s8; typedef unsigned char u8; typedef signed short s16; ...

  2. linux中数字转换成字符,各种数字类型转换成字符串型

    各种数字类型转换成字符串型--JAVA 各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型. 字符串型转换成 ...

  3. python转化成字符串_如何利用Python将其他数据类型转换成字符串类型

    Python设计语言中有一类常用的数据类型:字符串数据类型.字符串数据类型定义的变量可以使用双引号或单引号将字符括起来,除了字符串数据类型,还有其他的数据类型,如整型.布尔型.列表.字典.元组.可以将 ...

  4. oracle date 转换 timestamp,Oracle timestamp类型转换成date类型

    今天需要根据时间判断,统一修改某一个字段的数据.然后打开数据库发现,时间类型为timestamp类型.如下: 然后呢,这对我不是喝口水就可以解决的问题吗? 解决方案如下:我需要改这张表某个字段的内容, ...

  5. java long 变date_long类型转换成日期 LongToDate

    转载自原文 long类型转换成日期,此文章提供了几种不同的日期格式,希望可以帮助有需要的朋友. yyyy-MM-dd HH:mm:ss, yyyyMMddHHmmss, yyyy.MM.dd, yyy ...

  6. java long型时间_long类型转换成日期

    标签: package com.xcfh.util; import java.sql.Date; import java.text.SimpleDateFormat; /** * @Descripti ...

  7. java string转map_Java string类型转换成map代码实例

    Java string类型转换成map代码实例 背景:有时候string类型的数据取出来是个很标准的key.value形式,通过Gson的可以直接转成map 使用方式: Gson gson = new ...

  8. js格式化文件大小, 输出成带单位的字符串工具

    /*** 格式化文件大小, 输出成带单位的字符串* @method formatSize* @grammar formatSize( size ) => String* @grammar for ...

  9. java 16进制数组 字符串_byte数组转换成16进制字符串和字符数组的方法

    byte数组转换成16进制字符串String: public class CommonUtil { /** * byte数组转换成16进制字符串 * @param src * @return */ p ...

最新文章

  1. SAP到SAP的升级 --- SAP行业新的金矿
  2. Failed building wheel for netifaces
  3. Spark:计算时间差(天数和秒数)
  4. 迪普科技以近50%份额全面中标国家电网2016信息化硬件采购
  5. 轻松几步搞定SSH连接Git配置
  6. PowerShell3.0入门视频(由Jeffrey Snover和Jason Helmick主讲)
  7. 杭电 1248 寒冰王座(全然背包)
  8. S3C6410处理器介绍
  9. scipy.stats.norm
  10. win7卸载显卡及对应驱动后桌面分辨率不对以及鼠标键盘无反应
  11. spss常态检验_利用SPSS检验数据是否符合正态
  12. vue绑定背景图片有括号无法显示怎么办
  13. 计算机病毒免疫学,模块化免疫神经网络模型在计算机病毒分类检测中的
  14. 重装系统ie无法解析服务器名称,教你解决ie浏览器打不开的方法
  15. 软考中级 真题 2018年下半年 系统集成项目管理工程师 基础知识 上午试卷
  16. Sources for ‘Android API 32 Platform’ not found
  17. 在ArcGIS Online中创建三维图层和网络场景(2017.9)
  18. 利用python爬取网易云歌手top50歌曲歌词
  19. 夺宝观察:从一元夺宝用户的舆论看行业发展
  20. 魔鬼R包—SNPassoc的下载与安装

热门文章

  1. js刷新页面location.reload()用法
  2. 透明度与十六进制代码转换#ffffffff
  3. 获取截止本月之前12个月的月份
  4. HTTP LIVE Streams
  5. 芯片封装形式一二三介绍
  6. 上班偷偷看股票的小软件-火龙果
  7. 原创|Python wxpy模块的有趣应用,微信机器人,微信好友分析搞定
  8. (论文加源码)基于DEAP和MABHOB数据集的二分类脑电情绪识别(pytorch深度神经网络(DNN)和卷积神经网络(CNN))
  9. codeforces7D Palindrome Degree(manacheramp;dp或Hshamp;dp)
  10. Office Visio 2016安装