STM32将十六进制转换为float

按IEEE754标准,32位浮点数的标准格式为
在这里插入图片描述
S为浮点数的符号位,占1位,0为正数,1为负数
E是阶码,占用8位,将浮点数的指数真值e变为阶码E时,将e加上一个固定偏移值127.
M是尾数,占用23位

STM32程序

float Hex2Float(u8 *pMem1)
{
	u8 i;
	u32 number=0;
	u8 sign;
	u8 exponent;
	float mantissa;
	for(i=0;i<4;i++)
	{
		number = number<<8;
		number = number+ pMem1[i];
		
	}
	sign = (number & 0x80000000) ? -1 : 1;
	exponent = ((number >> 23) & 0xff) - 127;
	mantissa = 1 + ((float)(number & 0x7fffff) / 0x7fffff);
	return sign * mantissa * pow(2, exponent);
}
int main(void)
{	
  float float_num ;
  u8 pMem[] = {0x42,0xf5,0x05,0x1f};
  float_num = Hex2Float(pMem);
	
}
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要将十六进制转换为十进制数,可以使用STM32提供的库函数或者编写自定义函数来实现。 使用库函数的方法如下: 1. 首先,将十六进制数以字符串的形式存储在一个字符数组中。 2. 使用库函数`strtoul()`将字符数组转换为无符号长整型数。 3. 将得到的无符号长整型数转换为十进制数。 以下是使用库函数的示例代码: ```c #include <stdio.h> #include <stdlib.h> int main(void) { char hex_str[] = "0xFF"; // 十六进制数以字符串形式存储 unsigned long dec_num; dec_num = strtoul(hex_str, NULL, 16); // 将字符串转换为无符号长整型数 printf("Hexadecimal: %s\n", hex_str); printf("Decimal: %lu\n", dec_num); return 0; } ``` 自定义函数的方法如下: 1. 首先,将十六进制数以字符串的形式存储在一个字符数组中。 2. 使用循环遍历字符数组,将每个字符转换为对应的十进制数。 3. 根据十六进制数的位权,将每个字符对应的十进制数乘以相应的权重并累加,得到最终的十进制数。 以下是使用自定义函数的示例代码: ```c #include <stdio.h> #include <string.h> int hexToDec(char hex[]) { int len = strlen(hex); int base = 1; // 位权 int dec_num = 0; for (int i = len - 1; i >= 0; i--) { if (hex[i] >= '0' && hex[i] <= '9') { dec_num += (hex[i] - '0') * base; } else if (hex[i] >= 'A' && hex[i] <= 'F') { dec_num += (hex[i] - 'A' + 10) * base; } base *= 16; // 位权每次乘以16 } return dec_num; } int main(void) { char hex_str[] = "FF"; // 十六进制数以字符串形式存储 int dec_num; dec_num = hexToDec(hex_str); printf("Hexadecimal: %s\n", hex_str); printf("Decimal: %d\n", dec_num); return 0; } ``` 无论使用哪种方法,都可以将十六进制转换为十进制数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值