字节数组
字节数组是可变的字节序列(整数,其中0≤x≤255)。 您可以从字符串(如果不是字节字符串,则必须提供编码),字节大小的整数的可迭代对象或带有缓冲区接口的对象构造字节数组。 当然,您也可以手动构建它。
使用字节字符串的示例:
string = b'DFH'
b = bytearray(string)
# Print it as a string
print b
# Prints the individual bytes, showing you that it's just a list of ints
print [i for i in b]
# Lets add one to the D
b[0] += 1
# And print the string again to see the result!
print b
结果:
DFH
[68, 70, 72]
EFH
如果要进行原始字节操作,则需要这种类型。 如果您想要将4个字节读取为32位int,则可以使用带有unpack方法的struct模块,但是我通常只是将自己从bytearray中移到一起。
以二进制形式打印标题
您似乎想要的是获取您拥有的字符串,将其转换为字节数组,然后将其打印为以base 2 / binary为字符串的字符串。
因此,这是一个简短的示例,说明如何写出标头(我从名为“ dump”的文件中读取了随机数据):
with open('dump', 'rb') as f:
header = f.read(6)
b = bytearray(header)
print ' '.join([bin(i)[2:].zfill(8) for i in b])
将其转换为字节数组后,我在每个单个字节上调用bin(),它以“ 0b1010”的格式返回一个带有所需二进制表示形式的字符串。 我不希望“ 0b”,所以我用[2:]分割了它。 然后,我使用字符串方法zfill,这使我可以将所需的0数量前置为8的字符串(这是我们需要的位数),因为bin不会显示任何不需要的零。
如果您是该语言的新手,那么最后一行可能看起来很含糊。 它使用列表推导来列出我们要打印的所有二进制字符串的列表,然后将它们连接到最后的字符串中,并在元素之间留有空格。
最后一行的较少pythonic / con卷积变体是:
result = []
for byte in b:
string = bin(i)[2:] # Make a binary string and slice the first two bytes
result.append(string.zfill(8)) # Append a 0-padded version to the results list
# Join the array to a space separated string and print it!
print ' '.join(result)
我希望这有帮助!