我有一个十六进制字符串列表:
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
答案 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