单片机模块化程序: IEEE754规约,浮点数和16进制之间的转换

 

 

 

 

前言

  现在很多通信都需要传输各种数据,所有的仪器仪表都是把数据转化为16进制以后传输

  为了使转换通用,所以才有了 IEEE754规约

 

直接上菜

  

typedef union Resolve
{
  float float_data;
  long long_data;
  char char_table[4];
}Resolve_Typedef;

 

 

 

 

 

 

 

 

 

 

 

254 转为16进制

  

 

 

  

 

 

  注意:我使用的是STM32,它储存数据的时候低位在前高位在后

 

  咱比较喜欢这样看数据 00 00 00 FE  这就是254

 

 

65536 转为16进制

  

 

 

  

 

 

  00 01 00 00  这就是65536的16进制表示

 

 

说明

  大家有没有疑问为什么写的是转化为4字节

  

 

 

  大家如果做仪器仪表通信做久了就会发现几乎都是转换为4字节

 

  只不过在传输的时候有的仪器仪表是先传输高位

 

  就像咱上面的 65536  16进制是   00 01 00 00

 

  有极少数的仪器仪表先传输低位  00 00 01 00

 

 

 

 

220.5 转为16进制

  

 

 

  

 

 

  

 

 

 

 

 

 

 

 

 

 

 

有16进制浮点数数据了,转为浮点数

  假设数据是 00 80 5C 43 

  

 

 

  

 

 

 

扩展 C# 实现

65536 转为16进制

   byte[] byt = BitConverter.GetBytes(65536);//转为byt,默认就是转成4字节

  转换之后  

  byt[0] = 0x00;

  byt[1] = 0x00;

  byt[2] = 0x01;

  byt[3] = 0x00;

 

  byt[0] 存储的是最低位,和上面的单片机一样

  如果通信规定先传输高位,00 01 00 00 那么传输的时候

  byt[3],byt[2],byt[1],byt[0]      

 

 

 

220.5 转为16进制

//和咱单片机定义联合体解析一样的道理
//转为byt,默认就是转成4字节
byte[] byt = BitConverter.GetBytes(220.5f);

转换之后:

byt[0] = 0x00;
byt[1] = 0x80;
byt[2] = 0x5c;
byt[3] = 0x43;

 

 

注意:220.5f  后面需要加f

否则会按照double数据类型进行转换

按照 double 进行转换的,转换出来是8字节

byt[0] = 0x00;

byt[1] = 0x00;

byt[2] = 0x00;

byt[3] = 0x00;

byt[4] = 0x00;
byt[5] = 0x90;
byt[6] = 0x6B;
byt[7] = 0x40;

 

有16进制整形数据了,转为整形数据

  假设数据是65536    : 00 01 00 00

  

  byte[] byteValue = new byte[4];

  byteValue[3] = 0x00;
  byteValue[2] = 0x01;
  byteValue[1] = 0x00;
  byteValue[0] = 0x00;


  int intValue = BitConverter.ToInt32(byteValue,0);

 

  intValue 就是 65536

  注意

  

 

 

  倒过来填写的

 

  因为C#默认是低位放到低位,高位放到高位(小端模式)

 

 

有16进制浮点数数据了,转为浮点数

  假设数据是 220.5     :43 5C 80 00

  

  byte[] byteValue = new byte[4];

  byteValue[0] = 0x43;
  byteValue[1] = 0x5c;
  byteValue[2] = 0x80;
  byteValue[3] = 0x00;


  float floatValue = BitConverter.ToSingle(byteValue, 0);

 

  floatValue计算出来就是 220.5

  

posted on   广源时代  阅读(5176)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

导航

支付宝 QQ群
点击右上角即可分享
微信分享提示