十六进制字符串到十六进制文字的列表

时间:2020-09-16 03:08:27

标签: python python-3.x literals

我有一个十六进制字符串列表:

alter table c2 modify num integer unique key;
output:
mysql> desc c2;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num   | int(11) | NO   | PRI | NULL    |       |
| t     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

我想将此列表转换为十六进制文字。

输出应为:

alter table c2 drop constraint num;
output : ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint num' at line 1

2 个答案:

答案 0 :(得分:3)

使用列表推导将字符串数据转换为整数,然后转换为字节:

>>> lst = ['0x01','0xfe','0x02','0xff']
>>> d = bytes([int(x,0) for x in lst])
>>> d
b'\x01\xfe\x02\xff'

我假设您真的想要一个字节字符串,而不是Unicode字符串,因为它看起来像字节数据。

要生成 display 字符串,请使用十六进制值设置文字反斜杠和x的格式。您可以通过将0x切成字符串来获取十六进制值,但是为了保持格式一致性(例如两位数,小写),您仍然可以转换为整数,然后使用格式字符串:

>>> lst = ['0x43','0xfe','0x02','0xff']
>>> bytes([int(x,0) for x in lst]) # actual byte string shows printable ASCII
b'C\xfe\x02\xff'
>>> d = ''.join([f'\\x{int(v,0):02x}' for v in lst])  # display string of hex escape codes
>>> d
'\\x43\\xfe\\x02\\xff'
>>> print(d)
\x43\xfe\x02\xff

答案 1 :(得分:0)

我认为您可以做这样的事情。

print (''.join(['\\'+x for x in lst]))

其输出将是:

\0x01\0xfe\0x02\0xff

如果要删除前导0,则可以执行以下操作:

print((''.join(lst)).replace('0x',r'\x'))

它将给您:

\x01\xfe\x02\xff