将十六进制值的列表/字符串解压缩为整数

Posted

技术标签:

【中文标题】将十六进制值的列表/字符串解压缩为整数【英文标题】:Unpacking a list/string of hex values into integers 【发布时间】:2016-04-20 17:43:46 【问题描述】:

我正在尝试在 python 中将一个列表从十六进制转换为整数。

例如:

hexValues = '\x90\x82|uj\x82ix'
decodedHex = struct.unpack_from('B', hexValues,0)
print decodedHex

将打印 (144,) 而没有其他内容。有什么办法可以遍历这个字符串来获取所有值? (请记住,十六进制值的长度比给出的示例要长得多。)

【问题讨论】:

【参考方案1】:

您可以一次获取所有值:

import struct

hexValues = '\x90\x82|uj\x82ix'
format = '%dB' % len(hexValues)
decodedHex = struct.unpack_from(format, hexValues)
print(decodedHex)  # -> (144, 130, 124, 117, 106, 130, 105, 120)

正如 Jon Clements 在评论中指出的那样,您实际上并不需要使用 struct 模块:

decodedHex = tuple(bytearray(hexValues))
print(decodedHex)  # -> (144, 130, 124, 117, 106, 130, 105, 120)

【讨论】:

可能的替代方案list(bytearray(hexValues)) 非常感谢!知道为什么要打印这么多值吗?我认为 \x 是一个转义字符,表示接下来的两个字符是十六进制值。应该只返回 3 个整数? @javasaucebiner 您将获得与 len(hexValues) 一样多的信息 - 您期待什么? @javasaucebiner:有 8 个字符,所以 8 个字节值。 @javasaucebiner:|uj等都是可打印的ASCII值,所以不会用\xhh转义序列显示。它们不是 \xhh 序列的一部分,这些序列总是 2 个十六进制数字长。

以上是关于将十六进制值的列表/字符串解压缩为整数的主要内容,如果未能解决你的问题,请参考以下文章

PHP:从二进制数据流中解压缩32位整数

将整数转换为具有特定格式的十六进制字符串

Swift将十六进制字符串或字符转换为整数

将十进制字符串转换为十六进制字符串而不将字符串转换为整数

Linux命令(十六) 压缩或解压缩文件和目录 zip unzip

Python:将二进制文件解压缩成二维数组并给出长度错误