Python - 尝试从文件中提取字节时出错

时间:2015-03-22 11:59:07

标签: python binary byte

我目前正在尝试从文件中提取原始二进制字节,例如000001001000

f = open(r"file.z", "rb")
try:
    byte = f.read();
    print int(byte)
finally:
    f.close()

我使用int(byte)的原因是为了查看字符串的样子。 (我无法打印它,因为[解码错误 - 输出不是utf-8])

Traceback (most recent call last):
  File "C:\Users\werdnakof\Downloads\test.py", line 9, in <module>
    print int(byte);
ValueError: invalid literal for int() with base 10: '\x04\x80e\x06\xc0l\x06\xf0,\x02'

返回\ x04 \ x80e \ x06 \ xc0l \ x06 \ xf0,\ x02

我不太确定从哪里开始。我被告知这是12位固定,左边填充了代码。

有关如何解决此问题的任何建议或提示?我想要的只是12位数字,例如000001001000

3 个答案:

答案 0 :(得分:0)

要打印二进制字符串的内容,可以将其转换为十六进制表示形式:

print byte.encode('hex')

对于读取二进制结构,可以使用struct-module。

答案 1 :(得分:0)

使用encode和bin:

 bin(int(b.encode("hex"),16))

In [27]: b='\x04\x80e\x06\xc0l\x06\xf0,\x02'
In [28]: int(b.encode("hex"),16)
Out[28]: 21257928890331299851266L
In [29]: bin(int(b.encode("hex"),16))
Out[29]: '0b10010000000011001010000011011000000011011000000011011110000001011000000001



with open("file.z","rb") as f:
    for line in f:
        print(int(line.encode("hex"), 16))

答案 2 :(得分:0)

你能试试吗

f = open("file.z", "rb")
try:
    byte = f.read();
    print(bin(int(str(byte).encode("hex"),16)))
finally:
    f.close()

来自Padraic Cunningham的回答