【菜鸟日记】记一次16进制IEEE754标准浮点数转换为10进制学到的东西

俗话说前人栽树后人乘凉,感谢@zfxinli大哥,感谢提供思路,https://blog.csdn.net/zfxinli/article/details/4396537

感谢@cumubi7552大哥对intBitsToFloat函数细致入微的讲解。https://blog.csdn.net/cumubi7552/article/details/107799726

在zfxinli的文章中,直接贴出了代码

         String hex="637F813F";

         Float  value=Float.intBitsToFloat(Integer.valueOf(hex, 16));

其中主要使用了两个函数intBitsToFloat() 和valueOf()。

intBitsToFloat()方法是一个静态方法,遵循IEEE 754浮点标准,并且根据标准,它返回与表示整数位表示形式的给定参数相对应的浮点值,也可以使用类名进行访问,如果尝试使用类对象访问该方法,那么也不会出错。

valueOf()方法 用于返回给定参数的原生 Number 对象值,参数可以是原生数据类型, String等。该方法是静态方法。该方法可以接收两个参数一个是字符串,一个是基数。在本示例中,使用了如下格式

Integer valueOf(String s, int radix): 返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。(此外valueOf还有两种形式,在这不再赘述)

String s是将要被转换的字符串;radix是指将要被转换的字符串的进制数。

首先通过valueOf函数将字符串hex 转化为10进制数(637F813F=>1669300543),然后使用intBitsToFloat()将1669300543转为4.713233E21,得到符合IEEE754标准浮点值。

 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是C语言代码实现16进制转换10进制: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int main() { char hex[10]; int dec = 0, len, base = 1, i; printf("Enter a hexadecimal number: "); scanf("%s", hex); len = strlen(hex); for(i = len - 1; i >= 0; i--) { if(hex[i] >= '0' && hex[i] <= '9') { dec += (hex[i] - 48) * base; base *= 16; } else if(hex[i] >= 'A' && hex[i] <= 'F') { dec += (hex[i] - 55) * base; base *= 16; } else if(hex[i] >= 'a' && hex[i] <= 'f') { dec += (hex[i] - 87) * base; base *= 16; } } printf("The decimal equivalent of %s is %d", hex, dec); return 0; } ``` 代码说明: 1. 定义一个字符数组 `hex` 来存储输入的16进制数; 2. 定义一个整数变量 `dec` 来存储转换后的10进制数,初始化为0; 3. 定义一个整数变量 `len` 来存储输入的16进制数的长度; 4. 定义一个整数变量 `base` 来存储当前位数的权值,初始化为1; 5. 使用 `scanf()` 函数从标准输入中读取一个16进制数,并存储在 `hex` 数组中; 6. 计算 `hex` 数组中每个字符对应的10进制值,并累加到 `dec` 变量中; 7. 遍历 `hex` 数组时,从后往前依次处理每一位16进制数,根据字符的ASCII码值判断该字符表示的16进制数的值; 8. 处理完所有位数后,将 `dec` 变量的值输出给用户,即为转换后的10进制数。 注意事项: 1. 如果输入的16进制数中包含字母,则需要根据字母的大小写和ASCII码值的差值来计算对应的10进制值; 2. 如果输入的16进制数中包含非法字符,则无法进行转换,程序会输出错误的结果; 3. 在计算16进制数的值时,需要注意每一位的权值,即16的幂次方。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值