将动态数据转换为数组中的十六进制

问题描述

我正在使用 python 开发智能卡并使用 pyscard 库。我有以下数据:

WRITE_PREF = [0X80,0X12,0X00,0X01,0X20,0X00]

我正在接收字符串格式的随机数据(长度为 10)。转换为十六进制后,我得到包含随机字符串数据的十六进制值的数组。

问题: 十六进制值数组具有字符串形式的值。

示例:['0x33','0x32'....]

当我附加 WRITE_PREF 和这个十六进制数据时,我得到这样的数组:

[128,18,1,32,'0x33','0x32']

我将第一部分转换为十六进制并将整数数组值替换为十六进制值。 当我使用命令传输数据时:

 card.connection.transmit(final_array_in_hex)

出现错误。我很确定这是因为数组中的值是十六进制字符串。如果我手动传输一些数据,例如:

[0x33,0x32,0x30]

它工作正常。所以问题一定是因为数组数据中的引号。示例:

['0x33','0x32','0x30']

有没有办法解决这个问题?

解决方法

你有一个 str 代表一个十六进制数,让我们把它变成一个 int。我们使用 int 节省空间,int 也很灵活。我们可以选择如何表示这个 int

s = ['0x33','0x32']
s = [int(_s,base=16) for _s in s]
print(s) # defaults to displaying an int as decimal
print(list(f'0x{_s:x}' for _s in s)) # specify that we want to display as `x` or hexamdecimal

输出:

[51,50]
['0x33','0x32']

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...