python以二进制读取的文件显示b'b'_python - Python读取二进制文件并解码 - 堆栈内存溢出...

字节数组

字节数组是可变的字节序列(整数,其中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)

我希望这有帮助!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值