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

Working with binary in Python, Splitting numbers

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

每个数字必须以相同的 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,48。

从来没有在脚本中以二进制形式工作过,所以有点新。

干杯

要得到前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)

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

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 位的段,使用一些列表魔法可能是最简单的。

利用bin内置函数

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