Ale*_*lds 32
另一种方法是使用bitstring模块:
>>> from bitstring import BitArray
>>> input_str = '0xff'
>>> c = BitArray(hex=input_str)
>>> c.bin
'0b11111111'
Run Code Online (Sandbox Code Playgroud)
如果你需要剥离领先0b:
>>> c.bin[2:]
'11111111'
Run Code Online (Sandbox Code Playgroud)
bitstring正如jcollado的回答所示,该模块不是必需的,但它有许多高性能的方法可以将输入转换为位并操纵它们.您可能会发现这个方便(或不),例如:
>>> c.uint
255
>>> c.invert()
>>> c.bin[2:]
'00000000'
Run Code Online (Sandbox Code Playgroud)
等等
Ano*_*sse 22
在整数级别工作时,操作会快得多.特别是,转换为此处建议的字符串非常慢.
如果您只想要第7位和第8位,请使用eg
val = (byte >> 6) & 3
Run Code Online (Sandbox Code Playgroud)
(这是:将字节向右移6位 - 丢弃它们.然后只保留最后两位3是设置前两位的数字......)
这些可以很容易地转换为超快速的简单CPU操作.
jco*_*ado 18
这样的事情怎么样?
>>> bin(int('ff', base=16))
'0b11111111'
Run Code Online (Sandbox Code Playgroud)
这会将您拥有的十六进制字符串转换为整数,并将该整数转换为每个字节设置为0/1的字符串,具体取决于整数的位值.
正如评论所指出的,如果你需要摆脱0b前缀,你可以这样做:
>>> bin(int('ff', base=16)).lstrip('0b')
'11111111'
Run Code Online (Sandbox Code Playgroud)
或者这样:
>>> bin(int('ff', base=16))[2:]
'11111111'
Run Code Online (Sandbox Code Playgroud)
我认为最简单的就是在numpy这里使用。例如,您可以将文件作为字节读取,然后像这样轻松地将其扩展为位:
Bytes = numpy.fromfile(filename, dtype = "uint8")
Bits = numpy.unpackbits(Bytes)
Run Code Online (Sandbox Code Playgroud)
input_str = "ABC"
[bin(byte) for byte in bytes(input_str, "utf-8")]
Run Code Online (Sandbox Code Playgroud)
会给:
['0b1000001', '0b1000010', '0b1000011']
Run Code Online (Sandbox Code Playgroud)
这里如何使用 format()
print "bin_signedDate : ", ''.join(format(x, '08b') for x in bytevector)
Run Code Online (Sandbox Code Playgroud)
08b很重要。这意味着最多将附加 8 个前导零来完成一个字节。如果您不指定这一点,那么格式将只为每个转换后的字节提供可变的位长度。
使用python 格式字符串语法
>>> mybyte = bytes.fromhex("0F") # create my byte using a hex string
>>> binary_string = "{:08b}".format(int(mybyte.hex(),16))
>>> print(binary_string)
00001111
Run Code Online (Sandbox Code Playgroud)
第二行是魔术发生的地方。所有字节对象都有一个.hex()函数,该函数返回一个十六进制字符串。使用此十六进制字符串,我们将其转换为整数,告诉该int()函数它是以16为基数的字符串(因为hex是以16为基数)。然后,我们将格式化应用于该整数,以使其显示为二进制字符串。该{:08b}是真正的奇迹发生。它使用的是Format Specification Mini-Language format_spec。具体来说,它使用format_spec语法的width及type部分。该8套width到8,这是我们如何得到很好的填充0000,和b集类型为二进制。
与bin()方法相比,我更喜欢此方法,因为使用格式字符串可提供更大的灵活性。
| 归档时间: |
|
| 查看次数: |
69825 次 |
| 最近记录: |