Если два приложения хранят данные по-разному, но сконструированы таким образом, что файл для одного может также быть допустимым (но бессмысленным) файлом для другого, могут произойти очень плохие вещи. Программа может подумать, что она успешно загрузила файл (не подозревая, что данные бессмысленны), а затем напишет обратно файл, который был бы семантически идентичным, но который больше не будет осмысленно читаемым приложением, которое его написало (или что-либо еще в этом отношении).
Использование магических чисел не полностью предотвращает это, но может помочь хотя бы несколько.
Кстати, попытка угадать формат данных часто очень опасна. Предположим, например, что у вас есть список возможных дат в формате nn-nn-nn. Если вы не знаете, в каком формате находятся даты, может быть достаточно информации, чтобы довольно хорошо угадать формат (например, если одна из записей составляет 12-31-99, а затем отсутствующая информация, напротив, даты, вероятно, равны -dd-yy), но если все даты будут в течение первых 12 дней месяца, данные могут быть легко истолкованы. Предположим, однако, данным предшествовало что-то, говорящее «MM-DD-YY». Тогда риски неправильного толкования могут быть уменьшены.
Если он все равно потерпит неудачу, то зачем ему нужно обнаруживать номер плохой магии? Предположительно другие части файла wopuldn't имеют смысл, если это был другой формат файла. –
@Billy - с некоторыми форматами файлов вы не можете сказать, являются ли данные «плохими». Например, без магического числа было бы довольно сложно программно определить, был ли файл растровым. – Seth
Также вы не сможете отличить поврежденный файл в известном формате от (возможно) допустимого файла в неизвестном формате. –