我目前正在尝试从文件中提取原始二进制字节,例如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
答案 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的回答