gpt4 book ai didi

c++ - 理解这段代码(将十六进制直接写入文件-midi)

转载 作者:行者123 更新时间:2023-11-28 02:57:35 25 4
gpt4 key购买 nike

我找到了这段代码,

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 header 签名,但是其他十六进制值呢,如何将十六进制写入文件,我猜这些十六进制值来自十六进制转储,或者有没有办法手动预测要写入的十六进制值(除了 header )。

我试图理解文件格式,bmp、jpeg、exe、wav 等——在本例中是 midi。

例如,您可以从纯代码创建一个 bmp,您需要知道头文件格式,然后只需创建一个像素值缓冲区数组并使用 fopen() fwrite()。

如何理解其他文件格式,例如 EXE,我认为 EXE 的独特之处在于它由函数/变量编译而成,而不仅仅是像素或声音值的文件?

最佳答案

每个 midi 都有一个特定于 midi 文件格式的 header 。它与 bmp 格式不同,因此对于每种情况,您都已阅读该文件的文档。例如,对于 tga 文件格式,您可以找到一些信息 here .对于 MIDI,您可以找到更多信息 here

您找到的代码只是编写 header 的快速破解,通常为每个 header 定义结构,以便其他人可以更好地理解每个字节的含义:

例如,这是用于读取 tga 文件的 header :

struct TGAHeader
{
unsigned char descriptionlen;
unsigned char cmaptype;
unsigned char imagetype;
unsigned short cmapstart;
unsigned short cmapentries;
unsigned char cmapbits;
unsigned short xoffset;
unsigned short yoffset;
unsigned short width;
unsigned short height;
unsigned char bpp;
unsigned char attrib;
};

在 C++ 中,您必须非常小心地阅读此结构,因为您可能会遇到对齐问题,因此在这种情况下,您将如何阅读它:

TGAHeader header;
fread(&header.descriptionlen,sizeof(header.descriptionlen),1,file);
//and so on for each header member.

关于c++ - 理解这段代码(将十六进制直接写入文件-midi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21627768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com