바이너리 헤더 해석
magic number와 version으로 이 파일을 현재 코드가 해석할 수 있는지 확인한다.
파일명 확장자는 신뢰 경계가 아니다.바이너리 파일은 빠르고 작지만 사람이 읽어 주지 않는다. 포맷 헤더, 크기, 정렬, 엔디언을 코드가 직접 책임져야 한다.
magic number와 version으로 이 파일을 현재 코드가 해석할 수 있는지 확인한다.
파일명 확장자는 신뢰 경계가 아니다.payload byte 수가 실제 파일 크기와 맞는지 비교하고, 과도한 길이는 할당 전에 거절한다.
uint32_t처럼 폭이 고정된 타입으로 저장하고, 문자열과 vector는 길이 뒤에 원시 바이트를 둔다.
struct Header {
std::uint32_t magic; // 'NHC0' 같은 식별자
std::uint16_t version;
std::uint32_t payloadSize;
overflow-wrap: break-word;
word-break: keep-all;
};
// 헤더 검증 뒤 payloadSize 상한을 검사하고 본문을 읽는다.