在 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))
我有一个模块采用十进制格式的 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))