Понимание этого кода (запись шестнадцатеричного кода непосредственно в файл midi)

Я нашел этот код,

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 уникален в том смысле, что он составлен из функций / переменных, а не просто файла пикселей или звуковых значений?

0

Решение

У каждого midi есть заголовок, который является определенным для формата файла midi. Он не будет совпадать с форматом bmp, поэтому для каждого случая вы читали документацию по этому файлу. Например, для формата файла tga вы можете найти некоторую информацию Вот. В вашем случае для MIDI вы можете найти больше информации Вот

Код, который вы нашли, это просто быстрый взлом, который пишет заголовок, в общем, структуры определены для каждого заголовка, чтобы другие могли лучше понять значение каждого байта:

Например, это заголовок, используемый для чтения файлов tga:

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.
2

Другие решения

Для любого файла есть структура, которую можно читать из приложений, в основном вы можете записать все в файл напрямую, если знаете структуру файла, я сделал это для офисных документов, где мне нужно было создать документацию самостоятельно, потому что я Мне нужно было интегрировать систему управления правами, и я написал это также PDF для того же. насколько я знаю, что для обычного типа MIME вы можете найти тонны статей, обсуждающих файловую структуру.

для формата midi см. следующий документ http://faydoc.tripod.com/formats/mid.htm

0