gpt4 book ai didi

python - 用十六进制解压字符串

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:43 25 4
gpt4 key购买 nike

我有一个字符串,其中包含一个十六进制字符的浮点值,如下所示:

"\\64\\2e\\9b\\38"

我想提取 float ,但为了做到这一点,我必须让 Python 将字符串视为 4 个十六进制字符,而不是 16 个常规字符。首先我尝试替换正斜杠,但出现错误:

>>>> hexstring.replace("\\", "\x")
ValueError: invalid \x escape

我发现了

struct.unpack("f", "\x64\x2e\x9b\x38") 

完全符合我的要求,但如何转换字符串?

最佳答案

每当我看到一个(格式错误的)字符串,例如由这个字符列表组成的字符串时:

['\\', '\\', '6', '4', '\\', '\\', '2', 'e', '\\', '\\', '9', 'b', '\\', '\\', '3', '8']

什么时候想要的是这个字符列表

['\x64', '\x2e', '\x9b', '\x38']

我找到了 decode('string_escape') 方法。

但是要使用它,我们需要将两个字符r'\\'替换为r'\x'。您可以为此使用 replace(...) 方法。

In [37]: hexstring=r'\\64\\2e\\9b\\38'

In [38]: struct.unpack('f',(hexstring.replace(r'\\',r'\x').decode('string_escape')))
Out[38]: (7.3996168794110417e-05,)

In [39]: struct.unpack("f", "\x64\x2e\x9b\x38")
Out[39]: (7.3996168794110417e-05,)

附言。 decode 方法的这种使用在 Python2 中有效,但在 Python3 中无效。在 Python3 中,codecs.decode 严格用于将字节对象转换为字符串对象(错误,Python2 称之为 unicode 对象),而在上面的示例中,decode 实际上是将一个字符串对象到字符串对象。 Python2 中的大多数解码编解码器都会将字符串对象转换为 unicode 对象,但一些像 'string_escape' 不会。通常它们已被移动到其他模块,或以其他方式调用。

在 Python3 中,hexstring.decode('string_encode') 等价于 codecs.escape_decode(hexstring)[0]

编辑:另一种方法,在本质上类似于 jsbueno 的回答,是使用 binascii.unhexlify:

In [76]: import binascii
In [81]: hexstring=r"\\64\\2e\\9b\\38"
In [82]: hexstring.replace('\\','')
Out[82]: '642e9b38'

In [83]: binascii.unhexlify(hexstring.replace('\\',''))
Out[83]: 'd.\x9b8'

这些 timeit 结果表明 binascii.unhexlify 是最快的:

In [84]: %timeit binascii.unhexlify(hexstring.replace('\\',''))
1000000 loops, best of 3: 1.42 us per loop

In [85]: %timeit hexstring.replace('\\','').decode('hex_codec')
100000 loops, best of 3: 2.94 us per loop

In [86]: %timeit hexstring.replace(r'\\',r'\x').decode('string_escape')
100000 loops, best of 3: 2.13 us per loop

根据评论编辑:

This answer contains raw strings. The Department of Public Health advises that eating raw or undercooked strings poses a health risk to everyone, but especially to the elderly, young children under age 4, pregnant women and other highly susceptible individuals with compromised immune systems. Thorough cooking of raw strings reduces the risk of illness.

关于python - 用十六进制解压字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4078929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com