【发布时间】:2025-12-14 23:20:07
【问题描述】:
我找到了这段代码,
ofstream myfile;
myfile.open ("output.midi",ios::binary);
char buffer[44] = {0x4D,0x54,0x68,0x64,0x00,0x00,0x00,0x06,0x00,0x01,0x00,0x01,0x00,0x80,0x4D,0x54,0x72,0x6B,0x00,0x00,0x00,0x16,0x80,0x00,0x90,0x3C,0x60,0x81,0x00,0x3E,0x60,0x81,0x00,0x40,0x60,0x81,0x00,0xB0,0x7B,0x00,0x00,0xFF,0x2F,0x00};
myfile.write(buffer,44);
我该如何理解这一点,我可以看到前 2 个字节 = MZ 一个 PE 标头签名,但是其他十六进制值呢,怎么能只是将十六进制写入文件,我猜这些十六进制值来自十六进制转储,或者有没有办法手动预测要写入的十六进制值(除了标题)。
我正在尝试了解文件格式、bmp、jpeg、exe、wav 等 - 在本例中为 midi。
例如,您可以从纯代码创建 bmp,您需要知道头文件格式,然后只需创建像素值的缓冲区数组并使用 fopen() fwrite()。
如何理解其他文件格式,例如 EXE,我认为 EXE 是独一无二的,因为它由函数/变量编译而成,而不仅仅是像素文件或声音值?
【问题讨论】:
-
“如何才能将十六进制写入文件”就像在您的示例代码中一样。 “有没有办法手动预测要写入的十六进制值(除了标题)”是的;阅读文件格式的文档/规范。上网搜索,有些格式可能有教程,用简单的术语解释结构。 “如何理解其他文件格式,例如 EXE” 再次来自文档。可执行文件可能比您的其他示例更难理解。
标签: c++ file-format