這是一個愚蠢的問題,我不知道如何制定它,所以我將舉一個例子。我Python:從字符串中獲取int值
v = chr(0xae) + chr(0xae)
其中#AEAE,在十進制的44718.
我的問題的值是怎麼得到的v
整數值?我知道ord()
,但我只能將它用於字符,而不是字符串。
謝謝。
這是一個愚蠢的問題,我不知道如何制定它,所以我將舉一個例子。我Python:從字符串中獲取int值
v = chr(0xae) + chr(0xae)
其中#AEAE,在十進制的44718.
我的問題的值是怎麼得到的v
整數值?我知道ord()
,但我只能將它用於字符,而不是字符串。
謝謝。
我設法做到這一點使用的struct
模塊:
import struct
int_no = struct.unpack('>H', v)[0]
print int_no
,其輸出所期望的結果:
44718
我假設你想要將十六進制轉換爲整數而不是char字符串。
>>> int("AEAE",16)
44718
或
>>> int("0xAEAE",16)
44718
在回答您的意見,我能想到的一個方法是使用bitshifts:
>>> (ord('\xae') << 8) | (ord('\xae'))
44718
我不知道是否有一個更好的儘管如此。
它更容易保持十六進制作爲一個字符串,並使用int()
:
int("AEAE", 16)
您可以任意字節長度的字符串轉換的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數據。或相反亦然。
好了,簡單的方法是去:
def convert(v):
x = 0
for c in v:
x *= 256
x += ord(c)
return x
如果你想擁有最左面的字符有最大價值。
您可以預先取消v
以獲得相反的端序性。
的問題是,我得到從遠程服務器,其被表示爲這個數據''\ xae \ xae'',所以這是我需要轉換爲'int()' – ov1d1u 2013-05-08 18:43:06