当前位置: 首页 > 面试题库 >

如何将十六进制转换为浮点数

宗政德宇
2023-03-14
问题内容

我必须将hex,以strings 表示(例如"0xC40C5253")转换为浮点值( IEEE-754
转换)。我没有使用strconv.ParseFloat函数做到这一点。还有什么我要用的吗?到目前为止我找不到。我也尝试先将其转换为整数,然后转换为浮点数,但结果是错误的。

我最后一次尝试的代码:

package main

import (
  "fmt"
  "strconv"
)

func main () {
  x, err := strconv.ParseInt("C40C5253", 16, 64) 
  f, err := strconv.ParseFloat(fmt.Sprintf("%d", x), 64)

  if err != nil {
    fmt.Printf("Error in conversion: %s\n", err)
  } else {
    fmt.Println(f)
  }
}

问题答案:

首先,需要说明输入的位长。由于十六进制表示形式有4个字节(8个十六进制数字),因此很可能是a float32(需要询问者澄清)。

您可以将十六进制表示形式的字节解析为uint32using
strconv.ParseUint()ParseUint()总是返回uint64占用8个字节的内存,因此您必须将其转换为占用uint324个字节的内存,如下所示float32

s := "C40C5253"
n, err := strconv.ParseUint(s, 16, 32)
if err != nil {
    panic(err)
}
n2 = uint32(n)

现在您有了字节,但是它们存储在类型的变量中uint32,因此被解释为整数的字节。而且您想将它们解释为IEEE-754浮点数的字节,可以使用该unsafe包来做到这一点:

f := *(*float32)(unsafe.Pointer(&n2))
fmt.Println(f)

输出(在Go Playground上尝试):

-561.2863

注意:

正如JimB所指出的那样,对于第二部分(转换uint32float32),math程序包具有内置功能math.Float32frombits(),该功能可以在后台执行此操作:

f := math.Float32frombits(n2)


 类似资料:
  • 问题内容: 如何在Python中将以下十六进制字符串转换为float(单精度32位)? 问题答案: 在 Python 3中 : 在 Python 2中 :

  • 本文向大家介绍如何将十六进制转换为十进制?,包括了如何将十六进制转换为十进制?的使用技巧和注意事项,需要的朋友参考一下 而十六进制数是具有值是16的数字系统中的一个并且它具有唯一的16个码元:0,1,2,3,4,5,6,7,8,9和A,B,C,d,E ,其中A,B,C,D,E和F分别是十进制值10、11、12、13、14和15的单位表示。而十进制系统是最熟悉的号码系统向公众开放。它是10的基数,只

  • 本文向大家介绍如何将十进制转换为十六进制?,包括了如何将十进制转换为十六进制?的使用技巧和注意事项,需要的朋友参考一下 十进制是公众最熟悉的数字系统。它是基数10,只有10个符号-0、1、2、3、4、5、6、7、8和9。而十六进制是计算机或数字系统中最常见的数字系统颜色表示。它是基数16,只有16个符号:0、1、2、3、4、5、6、7、8、9和A,B,C,D,E,F。这些A,B,C,D ,E,F分

  • 我正在尝试将十六进制数据添加到十六进制字符串中,我需要使用它们的IEEE表示将浮点数添加到该字符串中。对于整数,这很简单: 其中value是数字的VARCHAR,params是包含十六进制字符串的VARCHAR。这个技巧适用于整数,但对于十进制,它会截断十进制部分,并将整数部分转换为十六进制整数。如果十进制的大小是固定的(java float或double),如何将值转换为十进制数的IEEE浮点表

  • 我需要处理一个十六进制字符串值到浮动颜色。 真正的颜色是(RGBA格式) 是绿色的,当0相当于00,1是FF。但是需要将颜色转换为0-255十进制数来计算从0到255的百分比,并设置浮点值。 如何通过示例转换为浮点数组? 当parsecolor i有整数值时: 但是如何将整数转换为浮点中的每种颜色呢?红、绿、蓝、阿尔法

  • 问题内容: 如何将十六进制字符串转换为base64?我发现此页面http://home2.paulschou.net/tools/xlate/,但是我需要Java中的某些功能:我在Internet上找到了一些东西,但是它们很难使用字节数组。我正在寻找一些更简单的东西 问题答案: 看看Commons Codec: