为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMTTMM 2023-08-08 15:31:30
我有一个十六进制字符串列表:lst = ['0x01', '0xfe', '0x02', '0xff']我想将此列表转换为十六进制文字。输出应该是:d = '\x01\xfe\x02\xff'
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

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


>>> lst = ['0x01','0xfe','0x02','0xff']

>>> d = bytes([int(x,0) for x in lst])

>>> d

b'\x01\xfe\x02\xff'

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


要创建显示字符串,请格式化文字反斜杠并使用十六进制值设置 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


查看完整回答
反对 回复 2023-08-08
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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

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

其输出将是:

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

如果你想删除前导 0,那么你可以这样做:

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

它会给你:

\x01\xfe\x02\xff


查看完整回答
反对 回复 2023-08-08
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信