2013-05-08 140 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以獲得相反的端序性。