用c++读文件前若干字节比对magic number可准确识别类型:以binary模式打开,读至少12字节,用std::array硬编码魔数,std::equal严格匹配;需处理id3标签、box结构等变体,并注意跨平台i/o细节。

怎么用 C++ 读前几个字节判断文件类型
直接读取文件开头的字节(通常 2–16 字节),比对已知的 Magic Number,是识别格式最轻量、最可靠的方式。不依赖扩展名,也不需要解析完整文件。
关键不是“读多少”,而是“读哪些位置”和“怎么比对”。比如 MP4 的魔数在 offset 4 开始(ftyp),而 JPEG 在 offset 0 是 ÿØ;FLAC 则必须检查 offset 0–3 的 fLaC,但前面可能有 ID3v2 标签干扰——所以不能无脑读头 4 字节就下结论。
- 用
std::ifstream以std::ios::binary模式打开,seekg(0)确保从头开始 - 读取长度建议至少 12 字节:覆盖绝大多数常见格式的魔数起始位(如
WebP魔数在 offset 8) - 避免用
std::string存二进制数据(会截断
