python - 16 位二进制转换

标签 python floating-point binary

我找到了几种将整数和浮点值都转换为二进制的方法,它们各有各的问题。我需要输入一个整数/ 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/

相关文章:

java - 16 位二进制前导零

python - 项目欧拉问题 18 : finding the best route in a triangular grid

python - 使用 Django 和 DRF 的审计日志

python - word2vec如何解析文本文件?

math - 如何将两个整数相除并在 Forth 中得到 float 的结果?

PHP 二进制数据 - 不依赖于机器

c++ - 如何将 C++ 库作为共享对象文件 (.so) 加载到 Python 中?

c++ - C++ 如何将 int 舍入为 float/double?

c++ - 如何在 OpenCV 中使用双类型映射进行重新映射

c - 如何以动态排列的结构加载二进制文件的信息?