这是一个愚蠢的问题,我真的不知道如何制定它,所以我举一个例子。我得到了
v = chr(0xae) + chr(0xae)
其中#AEAE是十进制的,值为44718。
我的问题是如何得到v
的整数值?我知道ord()
,但我只能将它用于char,而不能用于字符串。
谢谢。
答案 0 :(得分:3)
我设法使用struct
模块执行此操作:
import struct
int_no = struct.unpack('>H', v)[0]
print int_no
输出所需的结果:
44718
答案 1 :(得分:2)
您可以使用以下表达式之一将任意长度的字节字符串转换为int
或long
。
i = reduce(lambda x, y: (x<<8)+ord(y), v, 0)
i = reduce(lambda x, y: (x<<8)+ord(y), reversed(v), 0)
将其中一个用于little-endian数据,另一个用于big-endian数据。反之亦然。
答案 2 :(得分:1)
我假设您要将十六进制转换为整数而不是char字符串。
>>> int("AEAE",16)
44718
或
>>> int("0xAEAE",16)
44718
在回复你的评论时,我能想到的一种方法是使用bitshifts:
>>> (ord('\xae') << 8) | (ord('\xae'))
44718
我不确定是否有更好的方法。
答案 3 :(得分:1)
嗯,直截了当的方式是:
def convert(v):
x = 0
for c in v:
x *= 256
x += ord(c)
return x
如果您想让最左边的字符具有最大值。
您可以事先撤消v
以获得相反的字符串。
答案 4 :(得分:0)
将十六进制保持为字符串并使用int()
:
int("AEAE", 16)