【问题标题】:Python binary conversion to hexPython二进制转换为十六进制
【发布时间】:2016-09-15 22:46:08
【问题描述】:

我正在尝试以字符串转义方式将我在 python 中的二进制文件(一个 gzip 压缩的协议缓冲区对象)转换为十六进制字符串(例如 \xFA\x1C ..)。

我都试过了

repr(<mygzipfileobj>.getvalue())

还有

<mygzipfileobj>.getvalue().encode('string-escape')

在这两种情况下,我都会得到一个不是仅由十六进制字符组成的字符串。

\x86\xe3$T]\x0fPE\x1c\xaa\x1c8d\xb7\x9e\x127\xcd\x1a.\x88v ...

如何实现一致的十六进制转换,其中每个字节实际上都转换为 \xHH 格式? (其中 H 表示有效的十六进制字符 0-9A-F)

【问题讨论】:

  • 您想要/需要在每个十六进制字节前面加上\x 还是输出0123AB7F 而不是\x01\x23\xAB\x7F 也可以?还是您更喜欢其他格式?
  • 我知道如何获得 0123AB7F 输出,我正在寻找的是实际的 \x01\x23\xAB\x7F 格式

标签: python string binary hex gzip


【解决方案1】:

您经常看到的\xhh 格式是一种调试辅助repr() 的输出应用于具有非 ASCII 代码点的字符串。任何 ASCII 代码点都保留在原地,以保留那里的可读信息。

如果您必须将 all 个字符替换为 \xhh 转义符的字符串,则需要手动执行此操作:

''.join(r'\x{0:02x}'.format(ord(c)) for c in value)

如果您需要引号,您也需要手动添加:

"'{0}'".format(''.join(r'\x{:02x}'.format(ord(c)) for c in value))

【讨论】:

  • 谢谢。我已经尝试过了,我遇到了一个问题:格式中的零长度字段名称。 Python 2.6
  • @codeJack 将 0 添加到占位符:{0:02x}。 Python 2.6 相当……过时了。
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 2016-08-28
相关资源
最近更新 更多