在python中读取二进制文件时跳过第一个字节

问题描述

我想读入一个二进制文件并从其内容生成一个 c 初始值设定项。但是不知何故,我的读取过程似乎总是跳过第一个字节。你能帮我解释一下为什么会这样吗?

文件以二进制文件中的 0x4c 开头,但我从未在以下 Python 代码输出中看到这一点:

f = open("GoldenFPGA.bit","rb")
count = 0
print("#ifndef __CL_NX_BITSTREAM_HEADER_H");
print("#define __CL_NX_BITSTREAM_HEADER_H");
print("const uint8_t cl_nx_bitstream[] = ");
print("{");
print("    0x7A,0x00,");
print("    ",end='')
try:
    byte = f.read(1)
    while byte:
        # Do stuff with byte.
        byte = f.read(1)
        if byte:
            print("0x" + byte.hex() + ",",end='')
        count = count + 1
        if count % 8 == 0:
            print("\n    ",end='')
finally:
    f.close()
print("\n};");
print("#endif");

感谢您对此问题的任何帮助。

解决方法

问题是:

你在循环前读取了第一个字节,当你进入循环时 你读了另一个字节 -> 导致你跳过第一个字节。

您应该将其更改为:

f = open("GoldenFPGA.bit","rb")
count = 0
print("#ifndef __CL_NX_BITSTREAM_HEADER_H");
print("#define __CL_NX_BITSTREAM_HEADER_H");
print("const uint8_t cl_nx_bitstream[] = ");
print("{");
print("    0x7A,0x00,");
print("    ",end='')
try:
    byte = f.read(1)
    while byte:
        # Do stuff with byte.
        if byte:
            print("0x" + byte.hex() + ",",end='')
        count = count + 1
        if count % 8 == 0:
            print("\n    ",end='')
        # read next byte
        byte = f.read(1)
finally:
    f.close()
print("\n};");
print("#endif");