2013-05-08 201 views
4

这是一个愚蠢的问题,我不知道如何制定它,所以我将举一个例子。我Python:从字符串中获取int值

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

其中#AEAE,在十进制的44718.

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

谢谢。

回答

3

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

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

,其输出所期望的结果:

44718 
1

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

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

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

在回答您的意见,我能想到的一个方法是使用bitshifts:

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

我不知道是否有一个更好的尽管如此。

+0

的问题是,我得到从远程服务器,其被表示为这个数据''\ xae \ xae'',所以这是我需要转换为'int()' – ov1d1u 2013-05-08 18:43:06

0

它更容易保持十六进制作为一个字符串,并使用int()

int("AEAE", 16) 
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) 

将其中的一个用于little-endian数据,另一个用于big-endian数据。或相反亦然。

1

好了,简单的方法是去:

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

如果你想拥有最左面的字符有最大价值。

您可以预先取消v以获得相反的端序性。