2013-09-23 67 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