【问题标题】:How to Output Raw Binary as Raw Hex in Python 3?如何在 Python 3 中将原始二进制输出为原始十六进制?
【发布时间】:2018-09-15 08:29:05
【问题描述】:

好的,我看到了数以千计的关于二进制文件的不同答案,但似乎没有一个能满足我的要求。我有一个原始二进制文件。不可读。不是ASCII。不是十六进制。如果您在文本键盘中打开,所有的都是乱码,例如“ÿûÿû ÿûÿû ÿ”。我想读取原始二进制值并以十六进制写入这些值。前 8 位可能是 0xAA 的值,也称为 b10101010 或十进制 170,ascii 是上标字母 a。我希望打印原始 AA,并且我想一次打印 32 个字节。我不想打印“ÿûÿû ÿûÿû ÿ”。我想打印“0003200320032000050005fffbfffb0000000000000fffbfffb”。我也不想以 b'\x00\x03 \x03 \x03 \x00\x05\x00\x05\xff\xfb\xff\xfb\x00\x00\x00\x00\x00\x00\xff\ 结尾xfb\xff\xfb\x00\x00\x00\x00\x00\x00\xff' 甚至 b'\xfb00000000FFFBFFFB000000000000FFF' 或解析二进制文件时返回的任何其他奇怪的东西。我绝对需要所有前导零。我怎样才能得到我想要的?谢谢!!

【问题讨论】:

  • 哇,我真的认为这是一个可以在几分钟内回答的简单问题!哈哈。

标签: python-3.x binary


【解决方案1】:

这将从标准输入读取并将十六进制表示写入标准输出。您可以调整它以打开和读取文件(请记住使用模式 'rb' 打开)或采用 file 参数或任何满足您需求的参数。

def hexdump():
  while True:
    data = sys.stdin.read(32)
    if not data:
      return
    for byte in data:
      sys.stdout.write('%02x' % (ord(byte)))
    sys.stdout.write('\n')

【讨论】:

  • 谢谢,这非常好用。在我的情况下,我必须先按字节转换为字符“ord(chr(byte))”,但我正在通过 BLE 接收来自北欧板的数据
【解决方案2】:

终于想出了一个可行的方法。将字节对象转换为字符串似乎是错误的,但也许这是最好的方法?

import binascii

f = open(<FILENAME/PATH>, "rb")

# hexlify gives bytes object but looks like b'0xabcdef1234' when converted to a string:
hexString = str(binascii.hexlify(f.read(0x20))) 

# grabs just the abcd1234 part:
hexString = hexString.split("'")[1].upper().replace('0X','') 

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 2015-11-02
    • 2015-05-07
    • 1970-01-01
    • 2017-09-28
    • 2021-06-24
    • 2013-04-05
    • 2010-10-22
    • 2018-05-21
    相关资源
    最近更新 更多