从二进制文件中读取以 null 结尾的文件名

Reading null-terminated filename from binary file

在 C 中,我可以读取一个 "at most 16 characters" 以 null 结尾的文件名,只需将其读入一个小缓冲区即可:

FILE *fp = fopen("file.bin", "rb");
char filename[16];
fread(filename, 1, 16, fp);

但在我的 Python 方法中,我已经采取实际剥离空字符并将其转换为 ASCII 的方法,即使这些字符实际上可能并非仅是 ASCII,因为看起来 open() 并没有不接受 b'' 字符串,如果我在我的代码中使用 decode("utf-8") 可能是结果。

def read_filename(f):
    return f.read(16).rstrip(b"[=11=]").decode("ascii")

有没有更多的"standard"方法来做到这一点?

您的二进制数据中嵌入了 ASCII 数据,因此您的方法是正确的。

Python 字符串不是 C 字符串。数据以 NULL 结尾在 Python 中没有区别,标准库没有方法来读取此类数据、剥离 NULL 字节并像您所做的那样解码数据。

struct module 确实支持 写入 以 null 结尾的字符串(struct.pack() 调用中的 16s 将用空值填充输出字符串以弥补所需的长度)但在阅读时,空值留在原地。