gpt4 book ai didi

python - 16 位二进制转换

转载 作者:太空宇宙 更新时间:2023-11-04 00:15:45 27 4
gpt4 key购买 nike

我找到了几种将整数和浮点值都转换为二进制的方法,它们各有各的问题。我需要输入一个整数/ float 介于 0 和 10,000 之间的值,转换为16 位(准确)二进制字符串,随机操作这些位,然后转换返回整数/ float (取决于参数)。

但是,我一直在使用下面的代码:

def convert_to_binary(value):
'''
Converts a float to a 16-bit binary string.
'''
[d] = struct.unpack('>Q', struct.pack('>d', value))
return str('{:016b}'.format(d))

def convert_back(bin_num):
'''
Converts binary string to a float.
'''
print type(bin_num)
print bin_num
bf = int_to_bytes(int(bin_num, 2), 8) # 8 bytes needed for IEEE 754 binary64.
print struct.unpack('>d', bf)[0]
return struct.unpack('>d', bf)[0]

# return struct.unpack('d', struct.pack('Q', bin_num))[0]
#bin_num.pack('B*').unpack('g').first

def int_to_bytes(n, minlen=0): # Helper function
'''
Turns integer/long to byte string.
'''
nbits = n.bit_length() + (1 if n < 0 else 0) # +1 for any sign bit.
nbytes = (nbits+7) // 8 # Number of whole bytes.
b = bytearray()
for _ in range(nbytes):
b.append(n & 0xff)
n >>= 8
if minlen and len(b) < minlen: # Zero padding needed?
b.extend([0] * (minlen-len(b)))
return bytearray(reversed(b)) # High bytes first.

结果是这样的(图片形式,因为我无法从我的终端复制和粘贴):

this

我知道有不同类型的二进制文件(有符号/无符号、不同的位数等),但是我需要我的输出是我认为的无符号短格式.. .我所有的数字都是正值,为了允许我以后使用的位操作,它们需要恰好是 16 位长 -->(如果它们是浮点值,我可以使用二进制的额外数字但是只改变前16位,后面的就是小数点后面的,对吧?)

首先,我应该为 Float 输入和 Integer 输入编写函数吗?

其次,如何更改我的代码以允许所需的输出,而不是简单地使用 pop 等将二进制文件的长度缩短为 16?

最佳答案

我遇到了同样的问题,但我找到了一个更简单、更短的解决方案。

这是一个例子:

编码:

In [1]: val = 15

In [2]: bin_ = '{0:016b}'.format(val)
In [3]: bin_
Out[3]: '0000000000001111'

或者:

In [4]: bin_ = bin(val)[2:].zfill(16)
In [5]: bin_
Out[5]: '0000000000001111'

解码:

In [6]: int(bin_, 2)
Out[6]: 15

关于python - 16 位二进制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51045219/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com