Я нашел этот код,
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 уникален в том смысле, что он составлен из функций / переменных, а не просто файла пикселей или звуковых значений?
У каждого 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.
Для любого файла есть структура, которую можно читать из приложений, в основном вы можете записать все в файл напрямую, если знаете структуру файла, я сделал это для офисных документов, где мне нужно было создать документацию самостоятельно, потому что я Мне нужно было интегрировать систему управления правами, и я написал это также PDF для того же. насколько я знаю, что для обычного типа MIME вы можете найти тонны статей, обсуждающих файловую структуру.
для формата midi см. следующий документ http://faydoc.tripod.com/formats/mid.htm