Python中如何将不同位数整数列表转为对应ASCII字符的十六进制列表?
整数列表转对应ASCII字符十六进制的解决方案
问题分析
你需要将列表中的整数按规则转换为十六进制格式:0-9的整数转为对应数字字符的ASCII十六进制,大于9的整数直接转为自身的十六进制(作为ASCII码点)。之前的尝试要么错误处理了整个列表,要么拆分了多位数,都不符合需求。
错误原因
- 第一种尝试中,
str(a)将整个列表转为字符串,ord()仅能处理单个字符,因此报错; - 第二种尝试拆分了多位数的每一位,破坏了原整数的整体性,不符合需求。
正确代码
循环写法
a = [2, 2, 30, 1, 30, 6, 3, 30, 0, 9, 4, 30, 1, 30, 1, 29] result = [] for num in a: if 0 <= num <= 9: # 0-9的整数转为对应数字字符,再取其ASCII码的十六进制 hex_val = hex(ord(str(num))) else: # 大于9的整数直接转十六进制(作为ASCII码点) hex_val = hex(num) result.append(hex_val) print(result)
列表推导式(简洁版)
a = [2, 2, 30, 1, 30, 6, 3, 30, 0, 9, 4, 30, 1, 30, 1, 29] result = [hex(ord(str(num))) if 0 <= num <= 9 else hex(num) for num in a] print(result)
输出结果
运行后会得到符合预期的列表:
['0x32', '0x32', '0x1e', '0x31', '0x1e', '0x36', '0x33', '0x1e', '0x30', '0x39', '0x34', '0x1e', '0x31', '0x1e', '0x31', '0x1d']
关键逻辑说明
- 对于0-9的整数:先转为对应的数字字符(如
2→'2'),用ord()获取该字符的ASCII码值,再用hex()转为十六进制格式; - 对于大于9的整数:直接用
hex()转换,因为这些整数本身就是目标ASCII码点(如30对应ASCII记录分隔符,十六进制为0x1e)。
内容的提问来源于stack exchange,提问作者Sean Mckay
相关产品推荐
相关产品推荐

