【问题标题】:Write a hex string as binary data in Python在 Python 中将十六进制字符串写为二进制数据
【发布时间】:2014-09-15 00:12:00
【问题描述】:

我有一个像FF0000FF 这样的数据字符串,我想将它作为原始8 位字节11111111 00000000 00000000 11111111 写入文件。但是,当使用 struct.pack 或我得到 0 和 1 的文字 ASCII 版本时,我似乎最终会获得大量数据 FF 变成 FF 00 00 00

我怎样才能简单地获取一个十六进制字符串并将其写为二进制,所以当在十六进制编辑器中查看时,您会看到相同的十六进制字符串?

【问题讨论】:

  • 您要写出二进制的字符串表示,还是写出实际的数值?
  • 我想将十六进制对的二进制表示形式写成二进制格式的 8 位值。

标签: python hex


【解决方案1】:

您正在寻找binascii

binascii.unhexlify(hexstr)
返回十六进制字符串 hexstr 表示的二进制数据。
此函数是 b2a_hex() 的逆函数。 hexstr 必须包含
偶数个十六进制数字(可以是大写或小写
case),否则会引发 TypeError。

import binascii
hexstr = 'FF0000FF'
binstr = binascii.unhexlify(hexstr)

【讨论】:

    【解决方案2】:

    在 Python 3.x 中,您可以在字符串的修改形式前使用 b 前缀,然后将其写入二进制文件,如下所示:

    hex_as_bytes = b"\xFF\x00\x00\xFF"
    with open("myFileName", "wb") as f: f.write(hex_as_bytes)
    

    【讨论】:

    • 对不起,我省略了十六进制转义。我现在修好了
    【解决方案3】:

    您可以像这样使用byteshexfromhex

    >>> ss = '7e7e303035f8350d013d0a'
    >>> bytes.fromhex(ss)
    b'~~005\xf85\r\x01=\n'
    >>> bb = bytes.fromhex(ss)
    >>> bytes.hex(bb)
    '7e7e303035f8350d013d0a'
    

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 2017-05-26
      • 1970-01-01
      • 2013-11-24
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      相关资源
      最近更新 更多