将U16类型转换成u32,float,u8字符串
此文章是在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字符串相关推荐
- 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; ...
- linux中数字转换成字符,各种数字类型转换成字符串型
各种数字类型转换成字符串型--JAVA 各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型. 字符串型转换成 ...
- python转化成字符串_如何利用Python将其他数据类型转换成字符串类型
Python设计语言中有一类常用的数据类型:字符串数据类型.字符串数据类型定义的变量可以使用双引号或单引号将字符括起来,除了字符串数据类型,还有其他的数据类型,如整型.布尔型.列表.字典.元组.可以将 ...
- oracle date 转换 timestamp,Oracle timestamp类型转换成date类型
今天需要根据时间判断,统一修改某一个字段的数据.然后打开数据库发现,时间类型为timestamp类型.如下: 然后呢,这对我不是喝口水就可以解决的问题吗? 解决方案如下:我需要改这张表某个字段的内容, ...
- java long 变date_long类型转换成日期 LongToDate
转载自原文 long类型转换成日期,此文章提供了几种不同的日期格式,希望可以帮助有需要的朋友. yyyy-MM-dd HH:mm:ss, yyyyMMddHHmmss, yyyy.MM.dd, yyy ...
- java long型时间_long类型转换成日期
标签: package com.xcfh.util; import java.sql.Date; import java.text.SimpleDateFormat; /** * @Descripti ...
- java string转map_Java string类型转换成map代码实例
Java string类型转换成map代码实例 背景:有时候string类型的数据取出来是个很标准的key.value形式,通过Gson的可以直接转成map 使用方式: Gson gson = new ...
- js格式化文件大小, 输出成带单位的字符串工具
/*** 格式化文件大小, 输出成带单位的字符串* @method formatSize* @grammar formatSize( size ) => String* @grammar for ...
- java 16进制数组 字符串_byte数组转换成16进制字符串和字符数组的方法
byte数组转换成16进制字符串String: public class CommonUtil { /** * byte数组转换成16进制字符串 * @param src * @return */ p ...
最新文章
- SAP到SAP的升级 --- SAP行业新的金矿
- Failed building wheel for netifaces
- Spark:计算时间差(天数和秒数)
- 迪普科技以近50%份额全面中标国家电网2016信息化硬件采购
- 轻松几步搞定SSH连接Git配置
- PowerShell3.0入门视频(由Jeffrey Snover和Jason Helmick主讲)
- 杭电 1248 寒冰王座(全然背包)
- S3C6410处理器介绍
- scipy.stats.norm
- win7卸载显卡及对应驱动后桌面分辨率不对以及鼠标键盘无反应
- spss常态检验_利用SPSS检验数据是否符合正态
- vue绑定背景图片有括号无法显示怎么办
- 计算机病毒免疫学,模块化免疫神经网络模型在计算机病毒分类检测中的
- 重装系统ie无法解析服务器名称,教你解决ie浏览器打不开的方法
- 软考中级 真题 2018年下半年 系统集成项目管理工程师 基础知识 上午试卷
- Sources for ‘Android API 32 Platform’ not found
- 在ArcGIS Online中创建三维图层和网络场景(2017.9)
- 利用python爬取网易云歌手top50歌曲歌词
- 夺宝观察:从一元夺宝用户的舆论看行业发展
- 魔鬼R包—SNPassoc的下载与安装
热门文章
- js刷新页面location.reload()用法
- 透明度与十六进制代码转换#ffffffff
- 获取截止本月之前12个月的月份
- HTTP LIVE Streams
- 芯片封装形式一二三介绍
- 上班偷偷看股票的小软件-火龙果
- 原创|Python wxpy模块的有趣应用,微信机器人,微信好友分析搞定
- (论文加源码)基于DEAP和MABHOB数据集的二分类脑电情绪识别(pytorch深度神经网络(DNN)和卷积神经网络(CNN))
- codeforces7D Palindrome Degree(manacheramp;dp或Hshamp;dp)
- Office Visio 2016安装