首页 > 解决方案 > 在 python 2.7 中将 char 转换为十六进制值

问题描述

我在这里有点困惑。

我正在尝试使用 python 2.7 为 MIFARE 卡添加时间戳

我正在尝试的是 binascii.hexlify(char),但这似乎返回了一个字符串,这使得整个时间戳 TWICE 与开头一样长。

我也尝试了 hex(ord(char)),但这似乎也返回了一个字符串....

我在这里真正需要的是字符串的 ascii 值,按字符分割,因为写入函数需要十六进制值。

试过这样:

        MIFAREReader.MFRC522_Read(4)

        tmp = datetime.datetime.now().strftime("%d.%m. %H:%M")
        payload = []

        #print tmp
        #print "tmp-len is %d in size" % len(tmp)

        for x in range(0,len(tmp)):
            payload.append(binascii.hexlify(tmp[x]))    
            print tmp[x]

        print payload

        MIFAREReader.MFRC522_Write(4,payload)

我可以只使用这些字符并将它们转换为十六进制吗?我该怎么做?我对python有点迷茫,因为用c ++看起来很容易,但我不想放弃这个。

请帮助我

编辑:示例中的向量以这种方式填充:

        # Fill the data with 0xFF
        for x in range(0,16):
            data.append(0xFF)

超过 16 的每一位都会导致明显的溢出。库的编写方式和 MIFARE 系统的设计让我感到非常害怕。

标签: python-2.7hex

解决方案


经过一番谷歌搜索后,我发现了一种可行的方法,我假设:

似乎您可以将以下内容链接在一起:

print type(int(hex(ord("c")),16))

这会回到我身边

<type 'int'>

我认为这会起作用,我不确定它是否明确需要一个十六进制值,但我可以从这里继续。

编辑:所以,在下班并调试我的代码之后,问题似乎是循环 somehop​​ 搞砸了一切。我修复了它,现在将正确的时间戳写入卡,机会是这样的(如果有人感兴趣的话):

        MIFAREReader.MFRC522_Read(4)

        tmp = datetime.datetime.now().strftime("%d.%m.%Y %H:%M")
        payload = []

        #print tmp
        #print "tmp-len is %d in size" % len(tmp)

        for x in range(0,16):
            try:
                payload.append(ord(tmp[x])) 
            except:
                payload.append(0xFF)
            #print tmp[x]

        print payload

        MIFAREReader.MFRC522_Write(4,payload)

推荐阅读