如何在Python 3中输出原始二进制作为原始十六进制?

时间:2018-04-05 13:31:45

标签: python-3.x binary

好的,我看到数以万种不同的答案搞乱二进制,但它们似乎都没有做我想要的。我有一个原始的二进制文件。不可读。不是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'或解析二进制文件时返回的任何其他奇怪的东西。我绝对需要所有领先的零。我怎样才能得到我想要的东西?谢谢!

2 个答案:

答案 0 :(得分:0)

这将从标准输入读取并将十六进制表示写入标准输出。您可以将其调整为打开并从文件中读取(请记住以模式'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')

答案 1 :(得分:0)

最后想出了一些效果不错的东西。似乎错误地将byte-object thingy转换为字符串,但也许这是最好的方法?

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','')