2013-09-23 3 views
-1

Я пытаюсь преобразовать этот номер метки RFID, полученный из этого кода;Преобразование Hex To dec в 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

значение подводит не является строка, это так, х = 0000000000000000000213780510015dff, так что если вы попытаетесь создать экземпляр этого, он дает й = 0000000000000000000213780510015dff ^ SyntaxError: недопустимый маркер – user2785468

+0

@ user2785468: 'х = 0000000000000000000213780510015dff' является строка кода, а не значение. И недопустимая строка кода при этом, следовательно, 'SyntaxError'. (Или, если это значение, как строка '" x = 0000000000000000000213780510015dff ", то это строка.) – abarnert

+0

Это то, что я думал сначала, но я не был уверен, но с тех пор, как я теперь, благодаря вам, я буду должны дать ему другой подход. Спасибо за вашу помощь. – user2785468

5

Вы говорите, что хотите «преобразовать ... в строку».

Для этого можно использовать unhexlify, или decode('hex').

Однако в вашем случае единственная причина, по которой у вас есть гексагон, - это то, что вы вызвали encode('hex'), поэтому просто ... не делайте этого.

Если вы хотите декодировать его в int или Decimal или что-то в этом роде, вы можете сделать это, используя соответствующий конструктор, как показывает ответ Maxime. Однако вместо преобразования в hex только для декодирования в виде int вы можете просто его декодировать напрямую. Или, может быть, вы хотите декодировать шестнадцатеричную строку в десятичную строку? Или, может быть, это какая-то структура в стиле UUID, и вы хотите использовать struct.unpack, чтобы декодировать ее на части? Или…? Не зная точно, что вы пытаетесь сделать, трудно дать точный ответ ...

+0

Я немного рассмеялся ... Я вижу это слишком часто. Очень хорошая точка: P –

+0

Ну, до того, как я перешел в шестнадцатеричный, у меня было что-то вроде этого: ☺☺ ☻! X ♣ ►☺] ☻! X ♣ ►☺], так что если это можно преобразовать напрямую в десятичное, это будет даже лучше , – user2785468

+0

@ user2785468: Да, это строка, и вы попросили «преобразовать ее в десятичную или строчную». Если это не то, что вы хотите, вам нужно будет рассказать нам, что вы хотите. Я понятия не имею, что вы подразумеваете под «преобразованием в десятичную» или какой ценностью вы надеетесь получить. Если вы хотите обрабатывать 17 байтов как 68-битное целое число в ординарном порядке, ответ Maxime подскажет вам, как это сделать. Если вы хотите трассировать их как 68-битное целое число в порядке little-endian, кто-то может показать вам, как это сделать. Но если нам нужно угадать все возможные вещи, которые вы, возможно, захотите сделать и показать их все, это не произойдет. – abarnert

Смежные вопросы