在Windows中用Python 3写入原始二进制字节的十六进制转储

在Windows中用Python 3写入原始二进制字节的十六进制转储,python,Python,我试图从任意文件中读取指定数量的字节,并将其作为字节字符串输出。现在我只想输出到stdout,但最终我想要一个字节字符串,可以与之进行字节级比较。问题是,在我的一生中,我无法让Python在不将原始二进制值解释为ASCII的情况下输出它们 这是我的密码 import sys, os, msvcrt msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) bde_file_offset = int(sys.argv[1]) bde_file_numby

我试图从任意文件中读取指定数量的字节,并将其作为字节字符串输出。现在我只想输出到stdout,但最终我想要一个字节字符串,可以与之进行字节级比较。问题是,在我的一生中,我无法让Python在不将原始二进制值解释为ASCII的情况下输出它们

这是我的密码

import sys, os, msvcrt

msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

bde_file_offset = int(sys.argv[1])
bde_file_numbytes = int(sys.argv[2])

for x in range(3, len(sys.argv)):
  bde_file = open(str(sys.argv[x]),"rb")
  bde_file.seek(bde_file_offset)
  bde_file_bytestring = bde_file.read(bde_file_numbytes)
  sys.stdout.buffer.write(bde_file_bytestring)
  bde_file.close()
在提问之前,我对这个问题做了一些研究,发现了三种可能的解决方案,但都没有奏效。我尝试用-u运行Python解释器。我尝试过使用这个msvcrt.setmode函数,也尝试过使用sys.stdout.buffer.write。我甚至一次就试过了!什么都不管用


我在这里使用的测试文件是一个带有ABCDEFG的文本文件。我不希望它输出ABCDEFG,我希望它输出41424344444647,就像十六进制编辑器中的二进制视图一样。我怎样才能做到这一点?谢谢。

我不认为你所用的词是你认为它们的意思:p

您确实看到了原始字节字符串……如果您的终端知道如何呈现字节,它将。。。您要求的是ascii十六进制转储

def hex_dump(my_string):
    return " ".join(map("{0:0>2X}".format,map(ord,my_string)))

my_string = "ABCDE"
print(hex_dump(my_string))
如果您只需要
ord
inal值

ordinal_values = map(ord,my_string)

好的,我最初的问题措辞很糟糕。我真正想要的是从文件中读取任意字节,并打印出代表这些字节的十六进制值列表。这是令人惊讶的困难和代码做它是真的丑陋,但它的工作。这是我想要它做的最后一段代码

import sys

bde_file_offset = int(sys.argv[1])
bde_file_numbytes = int(sys.argv[2])

for x in range(3, len(sys.argv)):
  bde_file = open(str(sys.argv[x]),"rb")
  bde_file.seek(bde_file_offset)
  bde_file_bytestring = bde_file.read(bde_file_numbytes)
  bde_file_outputstring = " ".join("{:02x}".format(c) for c in bde_file_bytestring)
  print(bde_file_outputstring)
  bde_file.close()

好的,为了使这项工作,我必须改变阅读模式为“r”而不是“rb”。这就是我想要的,现在有没有一种方法可以处理单个整字节值?