4

这是那些愚蠢的问题之一,我真的不知道如何制定它,所以我举个例子。我有

v = chr(0xae) + chr(0xae)

其中 #AEAE 是十进制值 44718。

我的问题是如何获得的整数值v?我知道,ord()但我只能将它用于字符,而不能用于字符串。

谢谢你。

4

5 回答 5

3

我设法使用struct模块做到了这一点:

import struct
int_no = struct.unpack('>H', v)[0]
print int_no

输出所需的结果:

44718
于 2013-05-09T06:30:36.837 回答
2

您可以将任意长度的字节字符串转换为intlong使用这些表达式之一。

i = reduce(lambda x, y: (x<<8)+ord(y), v, 0)
i = reduce(lambda x, y: (x<<8)+ord(y), reversed(v), 0)

将其中一个用于小端数据,另一个用于大端数据。或相反亦然。

于 2013-05-08T19:17:41.223 回答
1

我假设您想将十六进制转换为整数而不是 char 字符串。

>>> int("AEAE",16)
44718 

或者

>>> int("0xAEAE",16)
44718

在回复您的评论时,我能想到的一种方法是使用位移:

>>> (ord('\xae') << 8) | (ord('\xae'))
44718

我不确定是否有更好的方法。

于 2013-05-08T18:40:41.057 回答
1

好吧,直接的方法是:

def convert(v):
    x = 0
    for c in v:
        x *= 256
        x += ord(c)
    return x

如果您想让最左边的字符具有最大值。

您可以v预先反转以获得相反的字节序。

于 2013-05-08T19:24:58.843 回答
0

将十六进制保留为字符串并使用更容易int()

int("AEAE", 16)
于 2013-05-08T18:40:47.067 回答