10进制浮点数转换成16进制与16进制转换成10进制

接触了一个惯导模块,实时解算惯导数据,通过串口发送出来,惯导的数据本来是浮点数,转换成16进制后,进一步输出,因为浮点数的存储是4个字节,即32位,单片机通信是以8位为位宽的,所以10进制与16进制的互换是以多个8位字节来操作的,转换源码如下:

  • 10进制转16进制

使用移位操作

1
2
3
4
5
6
float dat;
unsigned char mem[4];
mem[0]=dat;
mem[1]=dat>>8;
mem[2]=dat>>16;
mem[3]=dat>>24;
  • 16进制转10进制:

使用c语言库中memcpy函数:

1
2
3
4
5
6
7
8
9
10
11
#include "string.h"
#include "stdio.h"
float dat[1]={0};

mem[0]=0x34;
mem[1]=0xEF;
mem[2]=0X1E;
mem[3]=0x40;

memcpy(dat,mem,d);//将mem地址的连续四个字节内容拷贝到dat地址的连续四个字节地址中
//dat[0]存放的浮点数数据

微信公众号,求个关注0.0

wechat