2013-09-23 182 views
-1

我試圖將此代碼轉換爲此RFID標籤號碼;將十六進制轉換爲python中的十進制

import serial 

ser = serial.Serial() 
ser.port = "COM1" 
ser.baudrate = 9600 
ser.timeout = 3 
ser.open() 

if ser.open is True: 
    print "Port Not open" 

while ser.isOpen(): 
    #ser.timeout = 7 

    response = ser.read(17) 
    response = response.encode('hex') 

    print response 

我得到這個0000000000000000000213780510015dff這是一個十六進制數,但我想將其轉換爲十進制或字符串。當我嘗試這樣做時,我收到一個令牌錯誤。我該如何解決這個問題?

+5

**你得到了什麼**標記錯誤? –

+1

請發佈完整的回溯。 – thegrinner

+4

而你自己編碼迴應爲十六進制,爲什麼不只是不這樣做呢? –

回答

3

您可以使用int將十六進制數轉換爲整數。

>>> int("0000000000000000000213780510015dff", 16) 
149595175772052991 
+0

價值正在逐漸不是一個字符串,它是這樣的,X = 0000000000000000000213780510015dff,所以如果你試圖實例化這個,它給你X = 0000000000000000000213780510015dff ^ 語法錯誤:無效令牌 – user2785468

+0

@ user2785468:'X = 0000000000000000000213780510015dff'是代碼行,而不是一個值。並且在那裏有一個無效的代碼行,因此是'SyntaxError'。 (或者,如果它是一個值,如字符串'「x = 0000000000000000000213780510015dff」,那麼它是一個字符串。) – abarnert

+0

這就是我一開始想到的,但我不確定,但從現在開始,感謝你,我會必須給它另一種方法。非常感謝您的幫助。 – user2785468

5

你說你想「轉換...到字符串」。

您可以使用unhexlify來做到這一點,或decode('hex')

然而,在你的情況下,你有第一位十六進制的唯一原因是你叫encode('hex'),所以只是...不這樣做。

如果你想將它解碼爲一個int或一個Decimal或者什麼的,你可以通過使用適當的構造函數來完成,就像Maxime的答案所顯示的那樣。但是,不是將內容轉換爲十六進制,而是將其作爲一個整數進行解碼,您可能需要直接對其進行解碼。或者,也許你想將十六進制字符串解碼爲十進制字符串?或者,也許這是一些UUID風格的結構,並且您想使用struct.unpack將其解碼爲碎片?要麼…?不知道你想要做什麼,很難給出確切的答案...

+0

我笑了一下...我經常看到這種方式。非常好的一點:P –

+0

那麼,在我轉換成十六進制之前,我有這樣的東西·☺☺☻!x♣►☺]☻!x♣►☺]所以如果那可以直接轉換成十進制它甚至可以更好。 – user2785468

+0

@ user2785468:是的,這是一個字符串,你要求「將其轉換爲十進制或字符串」。如果這不是你想要的,你需要告訴我們你想要什麼。我不知道「轉換爲十進制」是什麼意思,或者你希望得到什麼值。如果你想把這17個字節當作一個68位整數,那麼Maxime的答案會告訴你如何做到這一點。如果您想以小端順序將它們作爲68位整數進行處理,則有人可以告訴您如何執行此操作。但是,如果我們必須猜測你想要做的每一件可能的事情並展示它們,那不會發生。 – abarnert

相關問題