我有类似x='0x08h, 0x0ah'
Python 的字符串,想将其转换为[8,10]
(如无符号整数)。我可以像拆分和索引它一样[int(a[-3:-1],16) for a in x.split(', ')]
,但是有没有更好的方法将它转换为整数列表?
如果我有这有关系y='080a'
吗?
编辑(加分:)。)什么(理智的)基于字符串的十六进制表示法支持python,哪些不支持?
我有类似x='0x08h, 0x0ah'
Python 的字符串,想将其转换为[8,10]
(如无符号整数)。我可以像拆分和索引它一样[int(a[-3:-1],16) for a in x.split(', ')]
,但是有没有更好的方法将它转换为整数列表?
如果我有这有关系y='080a'
吗?
编辑(加分:)。)什么(理智的)基于字符串的十六进制表示法支持python,哪些不支持?
在编写解析器之前,您确实必须知道要解析的模式是什么。
但看起来您的模式是: optional 0x
,然后是十六进制数字,然后是 optional h
。至少这是我能想到的最合理的方法,它同时处理'0x08h'
和'080a'
。所以:
def parse_hex(s):
return int(s.lstrip('0x').rstrip('h'), 16)
然后:
numbers = [parse_hex(s) for s in x.split(', ')]
当然,您实际上不需要删除0x
前缀,因为 Python 接受它作为十六进制字符串的一部分,因此您可以将其写为:
def parse_hex(s):
return int(s.rstrip('h'), 16)
但是,如果您更明确,我认为意图会更清楚。
从您的编辑:
编辑哪些(健全的)基于字符串的十六进制表示法支持 python,哪些不支持?
请参阅文档int
:
Base-2、-8 和 -16 文字可以选择以 0b/0B、0o/0O 或 0x/0X 作为前缀,就像代码中的整数文字一样。
而已。(如果您阅读了该段的其余部分,如果您保证有0x/0X
,则不必显式使用 base=16。但这对您没有帮助,因此您只需要一句话。)有关数字类型和数字文字的文档详细说明了“与代码中的整数文字一样”的内容;唯一令人惊讶的是负数不是文字,复数不是文字(但纯虚数是),并且可以使用非ASCII数字,但文档没有解释如何使用。
您还可以使用map
:map(lambda s:int(s.lower().replace('0x','').replace('h',''), 16),x.split(', '))