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

Posted

技术标签:

【中文标题】将动态数据转换为数组中的十六进制【英文标题】:Converting dynamic data to hex in array 【发布时间】:2021-03-09 17:36:00 【问题描述】:

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

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

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

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

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

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

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

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

 card.connection.transmit(final_array_in_hex)

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

[0x33,0x32,0x30]

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

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

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

【问题讨论】:

[int(x, 16) for x in foobar]? @ggorlen 会将其转换为十进制值。我只想要不带引号的值。使用您的解决方案将产生一个与十六进制值等效的十进制数组 十进制和十六进制值是相同的基础数字。对于 Python,它都是整数。 0x3351 是一回事。在 Python 解释器中输入 0x33 会得到 51。这里要么是字符串要么是整数; “不带引号的值”与“十六进制值的十进制等效值”相同。 @Shubh9718 试试看:result = 0x20 == 32。两者都是同一个数字,既不是十六进制也不是十进制,而是在计算机内存中以二进制的形式存储。 这能回答你的问题吗? Python dictionary automatically converting hexadecimals into decimals? 【参考方案1】:

你有一个代表十六进制数字的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']

【讨论】:

我不确定编辑是否正确,但在将其作为整数传递时确实得到了正确的数据。所以谢谢大家的回答。我想我应该对python的核心方面做更多的研究。 @KonradRudolph 很公平,我删掉了我的答案。

以上是关于将动态数据转换为数组中的十六进制的主要内容,如果未能解决你的问题,请参考以下文章

将字节数组转换为十进制

如何将Mac地址转换为十六进制并将其传递给java中的字节数组

如何将十六进制字符串转换为字节数组,以及十六进制字符串中的字节数组?

c++ 将十六进制数组转换成汉字的办法

如何将整数转换为存储在数组中的二进制

如何将十六进制字符串转换为字节数组? [复制]