如何将一个字符串转换为它的十进制表示形式?

5

有没有Python模块可以帮助我将字符串转换为64位整数?(此字符串的最大长度为8个字符,因此应该适合长整型)。

我想避免编写自己的方法。

示例:

Input String   Hex          result (Base-10 Integer)
'Y'            59           89
'YZ'           59 5a        22874
...
4个回答

9
这是一个需要使用 struct 的工作:
>>> s = 'YZ'
>>> struct.unpack('>Q', '\x00' * (8 - len(s)) + s)
(22874,)

或者稍微复杂一些:
>>> int(s.encode('hex'), 16)
22874

太好了!有没有一种简单的方法来执行相反的转换,即从整数22874获取字符串“YZ”? - John J. Camilleri
1
@JohnJ.Camilleri 当然可以 - 尝试使用 struct.pack('>H', 22874) - Roman Bodnarchuk
这个会在不同版本和平台上每次返回相同的数字吗(不像 hash(s))? - Anentropic
@Anentropic 是的 - Roman Bodnarchuk

4

我觉得没有内置的方法能够做到这一点,但是很容易自己想出一个方法:

>>> int("".join([hex(ord(x))[2:] for x in "YZ"]), 16)
22874

这个过程使用的是十六进制,当然可以进行优化。我会把这部分留作“练习”。


1
看一下“十六进制”编码 :) - Roman Bodnarchuk

3
另一种方法:
sum(ord(c) << i*8 for i, c in enumerate(mystr))

1
>>> reduce(lambda a,b: a*256+b, map(ord,'YZ'), 0)
22874

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接