String 将十六进制和整数字符串转换为Python中的列表

String 将十六进制和整数字符串转换为Python中的列表,string,hex,python-2.7,String,Hex,Python 2.7,我试图在十六进制数的字符串中找到最大值。我的转换方法是将字符串标记化,将标记列表转换为int,然后取最大值 字符串的格式如下所示: '\x1e\x00\x00\x00\xf0\x0f184203308373388492761797873987' 我无法控制格式,因为它是LZ4算法的Python绑定的输出 其他类似的答案,所以不要有混合类型或使用转义字符与许多十六进制数的字符串 那么,我如何将其转化为一个列表,例如: [0x1e, 0x00, 0x00, ...] 谢谢你的帮助 我不确定如何获

我试图在十六进制数的字符串中找到最大值。我的转换方法是将字符串标记化,将标记列表转换为int,然后取最大值

字符串的格式如下所示:

'\x1e\x00\x00\x00\xf0\x0f184203308373388492761797873987'
我无法控制格式,因为它是LZ4算法的Python绑定的输出

其他类似的答案,所以不要有混合类型或使用转义字符与许多十六进制数的字符串

那么,我如何将其转化为一个列表,例如:

[0x1e, 0x00, 0x00, ...]

谢谢你的帮助

我不确定如何获取十六进制值后的整数。。。它们应该是1、2或x位数吗

因此,我这样做:

import re

# convert unicode or string to raw
def raw(s):
    if isinstance(s, str):
        s = s.encode('string-escape')
    elif isinstance(s, unicode):
        s = s.encode('unicode-escape')
    return s

s = '\x1e\x00\x00\x00\xf0\x0f184203308373388492761797873987'

print [ re.sub(r'\\', r'0', raw(i)) for i in s]
我明白了:

['0x1e', '0x00', '0x00', '0x00', '0xf0', '0x0f', '1', '8', '4', '2', '0', '3', '3', '0', '8', '3', '7', '3', '3', '8', '8', '4', '9', '2', '7', '6', '1', '7', '9', '7', '8', '7', '3', '9', '8', '7']
希望这能有所帮助

编辑:简化了列表理解

编辑:如果您确实想去掉非十六进制值,那么可以使用

>>> print [int(re.sub(r'\\', r'0', raw(i)), 16) for i in s if len(raw(i))>1]
[30, 0, 0, 0, 240, 15]
比较。。。或者更好,如前所述


您是指
lz4.compress()
的输出吗?如果是,字符串不是十六进制数的列表<例如,code>lz4.compress(“z”*10)='\n\x00\x00\x00\xa0zzzzzz'。@DSM I指的是lz4.dumps()的输出。但是,输出看起来很相似,只是在我的示例中结尾是整数。在“\x”之后字符串的哪些部分?同样的事情:考虑<代码> LZ4。转储(“z”* 10)=`\\\\\x00 \x00 \x00 \xA0ZZZZZZZZ’/代码>。我同意“x”后面的两个数字是十六进制的,但哪些字符可以得到它们,哪些字符不能得到它们,这是一种侥幸的编码。例如,查看
lz4.dumps(“\xff”*10)
。你只是在追求max(ord(x)代表s中的x)吗。我把一些简单的事情复杂化了。感谢您和@DSM
>>> s = '\x1e\x00\x00\x00\xf0\x0f184203308373388492761797873987'
>>> ord(max(s))
240