添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
天涯  ·  C/C++ ...·  5 年前    · 
9976254  ·  字节序及 Go ...·  5 年前    · 
气势凌人的油条  ·  PeekNamedpipe not ...·  7 月前    · 
玉树临风的青蛙  ·  gradle - Publish ...·  1 年前    · 

如何读取文件为十六进制

3 人不认可

我希望能够给一个具有任何扩展名的输入文件,并以十六进制或二进制的形式读入,但要以字符串或其他方式读入。不是像python中的 open(file_path, 'rb') 。最好是用python或JS。

2 个评论
open(file_path, "rb")有什么问题吗?你可以使用索引访问所有的字节,甚至可以改变它们?
@OmOWalker 它不会让我逐一循环查看。或者它有,但我没有意识到。
javascript
python
hex
KeMeK
KeMeK
发布于 2021-07-16
1 个回答
CodeMonkey
CodeMonkey
发布于 2021-07-16
已采纳
0 人赞同

可以使用print()的 "x "格式将一个字节格式化为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个十六进制数字的序列。

Output:

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