【问题标题】:How to read files as hex如何以十六进制读取文件
【发布时间】:2021-09-24 13:48:36
【问题描述】:

我希望能够获得具有任何扩展名的输入文件,并将其以十六进制或二进制格式读取,但以字符串或其他格式读取。不像 python 中的open(file_path, 'rb')。最好在 python 或 JS 中。

编辑:@JasonM1 的回答对我有用。原来我不知道如何正确使用open()。随意投反对票。

【问题讨论】:

  • 欢迎来到 Stack Overflow!请拨打tour,阅读what's on-topic hereHow to Askquestion checklist,并提供minimal reproducible example。 “为我实现此功能”与此站点无关。你必须诚实地尝试,然后就你的算法或技术提出一个具体问题。为什么open(path, 'rb') 不适合你?
  • open(file_path, "rb") 有什么问题??您可以使用索引访问所有字节,甚至可以更改它们?
  • @OmOWalker 它不允许我单独遍历每一个。或者确实如此,我不知道。
  • @KeMek - 如果答案解决了您的问题(“这正是我所需要的”),那么请继续接受答案(单击复选图标),以便其他人知道答案是相关的。谢谢!

标签: javascript python hex


【解决方案1】:

可以使用“x”格式的 print() 将字节格式化为 2 位十六进制字符串。使用“rb”文件模式以二进制模式打开文件,将文件流作为字节序列处理。您可以一次读取一个数据块,然后一次一个字节地遍历每个数据块。

import sys

with open(sys.argv[1], 'rb') as fin:
    while True:
        data = fin.read(16)
        if len(data) == 0:
            break
        # iterate over each byte in byte sequence
        for b in data:
            print(' {:02x}'.format(b), end='')
        print()

如果在源代码上运行上述代码,则输出将是每行 16 个十六进制数字的序列。

输出:

69 6d 70 6f 72 74 20 73 79 73 0d 0a 0d 0a 77 69
74 68 20 6f 70 65 6e 28 73 79 73 2e 61 72 67 76
...
3d 27 27 29 0d 0a 20 20 20 20 20 20 20 20 70 72
69 6e 74 28 29 0d 0a

例如,第一行“import sys”输出为69 6d 70 6f 72 74 20 73 79 73,后跟0d 0a 用于CR LF 字符。

【讨论】:

  • 谢谢,这正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2016-11-04
相关资源
最近更新 更多