如何在python中将16位十六进制和二进制表示形式转换为十进制浮点数(反之亦然)?

时间:2019-05-29 13:04:36

标签: python struct binary formatting hex

我正在解决一个问题,该问题要求我将浮点数的十六进制和二进制FP16表示形式转换为十进制浮点数。我还需要将十进制浮点数转换为FP16十六进制和二进制表示形式。

有很多解决方案来转换FP32数字。但我特别需要 FP16表示形式

我已经找到了FP16二进制到十进制浮点数的解决方案:

a = struct.pack("H",int("0010100011110101",2))

float = np.frombuffer(a, dtype =np.float16)[0]

基本上我想要的是:

FP16二进制->十进制浮点数(0010100011110101-> 0.0387268066)

FP16十六进制->十进制浮点数(28f5-> 0.0387268066)

十进制浮点数-> FP16二进制(0.0387268066-> 0010100011110101)

十进制浮点数-> FP16十六进制(0.0387268066-> 28f5)

1 个答案:

答案 0 :(得分:0)

因此,我经过一番研究后找到了解决方案,并将其发布在这里,供可能需要该解决方案的任何人使用。

<form method="GET" action="{% url 'search' %}">
 <input type="text" name="q" value="{{request.GET.q}}" placeholder="Search for project" />
 <input type="submit" value="Search" />
</form>

<tbody>
{% for post in posts %}
<tr data-href="linkToFile.pdf"> 
<td>{{ post.id }}{% if query %}&q={{query}}{% endif %}</td>
<td><a href="{% url 'post-detail' post.id %}">{{ post.asset_name }}{% if query %}&q={{query}}{% endif %}</a></td>
</tr>
{% endfor %}
</tbody>

FP16二进制到十进制浮点数

import struct
import numpy as np
bin = "0010100011110101"
hex = "28f5"
dec_float = 0.03872680

FP16十六进制至十进制浮点数

y = struct.pack("H",int(bin,2))
float = np.frombuffer(y, dtype =np.float16)[0]

十进制浮点数到FP16二进制

y = struct.pack("H",int(hex,16))
float = np.frombuffer(y, dtype =np.float16)[0]

十进制浮点数为FP16十六进制

binary = struct.unpack('H',struct.pack('e',dec_float))[0]
binary = bin(binary)
binary = binary[2:]
binary = "0"*2 + binary