我有一个模块,它采用十进制格式的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,48。
从未在脚本中使用二进制文件,所以有点新鲜。
干杯
答案 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位段,可能是最简单的一些列表魔法。