2015-04-05 5 views
0

В C, я мог читать «не более 16 символов» имя файла, которое завершается нулем, просто читая его в небольшой буфер:Чтение завершается нулем имя файла из двоичного файла

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"\0").decode("ascii") 

Есть ли более «стандартный» способ сделать это?

ответ

0

У вас есть двоичные данные со встроенными данными ASCII, поэтому ваш метод верен.

Строки Python не являются строками C. То, что данные завершены с NULL, не имеет никакого отношения к Python, и стандартная библиотека не имеет методов для чтения таких данных, разбивает NULL-байты и декодирует данные, как вы это делали.

struct module делает поддержку писать нулевых байт (16s в виде struct.pack() вызова пэда выходной строки с нулями, чтобы составить требуемую длину), но на чтение аннулирует остаются на месте.

Смежные вопросы