繁体   English   中英

在Python中,将十六进制文件解码为等效的十进制“文字”

[英]In Python, decoding hex file to decimal 'literal' equivalent

我有一个十进制后pi的前1亿位数的十六进制文件,在十六进制编辑器中,它看起来像这样:

14 15 92 65 35 89 79 32 etc.

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

当我尝试在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')

演示:

>>> snippet = '\x14\x15\x92e5\x89y28F&C82yP(\x84\x19qi9\x93u\x10X \x97IDY#\x07\x81d\x06(b\x08\x99\x86(\x03H%4!\x17\x06y'
>>> snippet.encode('hex')
'1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679'

本质上,您的十六进制编辑器会执行此操作,将字节表示为十六进制字符。

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])

'1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM