在Python中使用二进制文件,拆分数字

时间:2015-03-20 22:56:02

标签: python binary

我有一个模块,它采用十进制格式的2 X 8bit数字,具有特定的结构

每个数字必须以相同的4位= 0011开头 其次是8位变量 然后是4位被忽略,因此设置为0000

所以计算16位数就足够了

变量数* 16将它向左移4位,添加12288 = 0011 | 000000000000将得到所需的结果。

所以如果我的输入数字是19,例如

19 X 16 + 12288 = 12592 = 0011000100110000

下一步是将其拆分为两个X 8位数

00110001 | 00110000 = 49,48

如何在python中有效地从12592到49,4​​8。

从未在脚本中使用二进制文件,所以有点新鲜。

干杯

3 个答案:

答案 0 :(得分:7)

要获得前8位,只需将其向右移8位。

   0011000100110000 >> 8
==         00110001

要获取最后8位,请使用0b11111111屏蔽它,即255

   0011000100110000
&  0000000011111111
-------------------
   0000000000110000

代码示例:

>>> n = int("0011000100110000", 2)
>>> n
12592
>>> n >> 8, n & 255
(49, 48)

或者,您也可以使用divmod,但>>&似乎要快一些。

>>> divmod(n, 256)
(49, 48)

答案 1 :(得分:2)

利用bin内置功能

def split16Bit(num):
    binary = bin(num)[2:].rjust(16, '0')
    return (int(binary[:8], 2), int(binary[8:], 2))

答案 2 :(得分:0)

这是一个例子,不确定它是否适用,因为你没有提供示例代码。

from binascii import hexlify
from sys import version_info

if version_info >= (3, 0):
    return bin(int.from_bytes(text_data.encode(), 'big'))
else:
    return bin(int(hexlify(text_data), 16))

这是从我在我写的一次性密码加密模块中使用的代码中获取的。它可以很好地转换字符串,继承整个方法。

def _string_converter(self, text_data):
    """Takes a given string or file and converts it to binary."""
    if version_info >= (3, 0):
        return bin(int.from_bytes(text_data.encode(), 'big'))
    else:
        return bin(int(hexlify(text_data), 16))

作为如何将字符串转换为16位二进制文​​件的示例,它可以拆分为8位段,可能是最简单的一些列表魔法。