这是那些愚蠢的问题之一,我真的不知道如何制定它,所以我举个例子。我有
v = chr(0xae) + chr(0xae)
其中 #AEAE 是十进制值 44718。
我的问题是如何获得的整数值v
?我知道,ord()
但我只能将它用于字符,而不能用于字符串。
谢谢你。
我设法使用struct
模块做到了这一点:
import struct
int_no = struct.unpack('>H', v)[0]
print int_no
输出所需的结果:
44718
您可以将任意长度的字节字符串转换为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)
将其中一个用于小端数据,另一个用于大端数据。或相反亦然。
我假设您想将十六进制转换为整数而不是 char 字符串。
>>> int("AEAE",16)
44718
或者
>>> int("0xAEAE",16)
44718
在回复您的评论时,我能想到的一种方法是使用位移:
>>> (ord('\xae') << 8) | (ord('\xae'))
44718
我不确定是否有更好的方法。
好吧,直接的方法是:
def convert(v):
x = 0
for c in v:
x *= 256
x += ord(c)
return x
如果您想让最左边的字符具有最大值。
您可以v
预先反转以获得相反的字节序。
将十六进制保留为字符串并使用更容易int()
:
int("AEAE", 16)