在Python中,将十六进制文件解码为十进制';文字';相等的

在Python中,将十六进制文件解码为十进制';文字';相等的,python,python-2.7,character-encoding,hex,Python,Python 2.7,Character Encoding,Hex,我有一个十六进制文件,小数点后的第一个1亿位数的圆周率,在十六进制编辑器中,它如下所示: 14 15 92 65 35 89 79 32 etc. 我需要将其转换为字符串(最终是整数)'1415926435897932'等。因此它不需要从十六进制转换为十进制,它已经是十进制的,就像十六进制字节一样。(我在标题的引号中使用了“literal”一词,这可能是完全错误的,因为它暗示了字符串literal。) 当我尝试用python读取文件时,我会遇到各种编码困难(因为第一个字节15是非打印字符,等等

我有一个十六进制文件,小数点后的第一个1亿位数的圆周率,在十六进制编辑器中,它如下所示:

14 15 92 65 35 89 79 32 etc.
我需要将其转换为字符串(最终是整数)'1415926435897932'等。因此它不需要从十六进制转换为十进制,它已经是十进制的,就像十六进制字节一样。(我在标题的引号中使用了“literal”一词,这可能是完全错误的,因为它暗示了字符串literal。)

当我尝试用python读取文件时,我会遇到各种编码困难(因为第一个字节15是非打印字符,等等)

例如:

>>> f = open('pi100m.hexbin.000', 'rb')
>>> contents = f.read()
>>> f.close()
>>> snippet = contents[:50]
>>> snippet
'\x14\x15\x92e5\x89y28F&C82yP(\x84\x19qi9\x93u\x10X \x97IDY#\x07\x81d\x06(b\x08\x99\x86(\x03H%4!\x17\x06y'
>>> # if I 'print snippet', I get those question marks in triangles
>>> # for the nonprinting characters, they do not reproduce
>>> # in stackoverflow
我已经尝试了很多关于编码的StackOverflow文章和Python帮助文档,但我觉得我缺少了一些非常基本的东西。

编码为十六进制,那么您至少有一个字符串表示:

integer_string = contents.encode('hex')
演示:

这与十六进制编辑器所做的基本相同,将字节表示为十六进制字符。

编码为十六进制,那么您至少有一个字符串表示:

integer_string = contents.encode('hex')
snippet = '\x14\x15\x92e5\x89y28F&C82yP(\x84\x19qi9\x93u\x10X \x97IDY#\x07\x81d\x06(b\x08\x99\x86(\x03H%4!\x17\x06y'
''.join([str(ord(x)/16)+str(ord(x)%16) for x in snippet])
演示:

这基本上与十六进制编辑器相同,将字节表示为十六进制字符

snippet = '\x14\x15\x92e5\x89y28F&C82yP(\x84\x19qi9\x93u\x10X \x97IDY#\x07\x81d\x06(b\x08\x99\x86(\x03H%4!\x17\x06y'
''.join([str(ord(x)/16)+str(ord(x)%16) for x in snippet])


也许是
'.join([str(ord(x))for x in snippet])
?@JoranBeasley,这个表达式的输出是'20211461015313712150567003867565012118040132…'至少它看起来不像我到目前为止得到的任何东西那样毫无意义!对不起,我的坏“'''.[hex(ord(x))[2:]代表代码片段中的x])也许
'.[str(ord(x))代表代码片段中的x])
?@JoranBeasley,这个表达式的输出是“2021146101531371215056700386756501218040132…”至少它看起来不像是我迄今为止得到的任何东西!对不起,我的坏“'.”。加入([hex(ord(x))[2:]代码片段中的x])就像我怀疑的那样,我遗漏了一些该死的基本信息。我没能意识到一个人可以用“十六进制”来表示和编码参数。。。不知道我怎么会在文件里漏掉这个。谢谢你,好先生!就像我怀疑的那样,我错过了一些该死的基本东西。我没能意识到一个人可以用“十六进制”来表示和编码参数。。。不知道我怎么会在文件里漏掉这个。谢谢你,好先生!