反其道而用之,把数组写入文件

本文介绍了一种将MIDI铃声资源转换为数组的方法,并提供了将数组还原为MIDI文件的示例代码,便于验证转换正确性或进一步编辑。

前一段时间我曾经写了一篇文章介绍如何编写程序把铃声资源转为数组,其实也可以把转换后的数组再还原成资源以供验证或者做其他用途。几天前有朋友向我索取MID铃声资源,我给了他转化后的资源数组,原本以为他是直接在程序中使用的,但他却似乎不喜欢这种格式,希望我能直接给他铃声,他大概要放到T卡上试听,恰好我也没有原始的音源。后来想了想,其实也是很简单的,只需要一个读写文件的函数,把数组内容写入文件,修改一下扩展名,就变成我们需要的音源了。代码太简单,和朋友们共同学习,希望大伙不要扔砖头。

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <windows.h>
const unsigned char aa[] ={
/* Data from file 1(默认).mid */
0x4d, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x08, 0x01, 0xe0, 0x4d, 0x54,
0x72, 0x6b, 0x00, 0x00, 0x00, 0x29, 0x00, 0xf0, 0x13, 0x7f, 0x7f, 0x0b, 0x01, 0x00, 0x18, 0x01,
0x18, 0x03, 0x18, 0x04, 0x18, 0x05, 0x18, 0x06, 0x18, 0x09, 0x18, 0xf7, 0x00, 0xff, 0x51, 0x03,
0x06, 0x8a, 0x1b, 0x00, 0xff, 0x58, 0x04, 0x04, 0x02, 0x18, 0x08, 0x00, 0xff, 0x2f, 0x00, 0x4d,
0x54, 0x72, 0x6b, 0x00, 0x00, 0x01, 0xbb, 0x00, 0xff, 0x03, 0x0a, 0x53, 0x6f, 0x75, 0x6e, 0x64,
0x54, 0x52, 0x61, 0x63, 0x6b, 0x00, 0xb0, 0x79, 0x00, 0x00, 0x00, 0x79, 0x00, 0x07, 0x00, 0x01,
0x20, 0x00, 0x01, 0xc0, 0x5f, 0x82, 0x38, 0xb0, 0x07, 0x7f, 0x81, 0x25, 0x90, 0x2d, 0x73, 0x78,
0x39, 0x68, 0x98, 0x6a, 0x39, 0x00, 0x83, 0x18, 0x2d, 0x00, 0x81, 0x07, 0x30, 0x72, 0x78, 0x3c,
0x68, 0x98, 0x73, 0x3c, 0x00, 0x81, 0x36, 0x30, 0x00, 0x82, 0x5f, 0x2d, 0x75, 0x78, 0x39, 0x6e,
0xab, 0x5b, 0x39, 0x00, 0x2d, 0x2d, 0x00, 0x8f, 0x00, 0x2d, 0x73, 0x78, 0x39, 0x68, 0x98, 0x6a,
0x39, 0x00, 0x83, 0x17, 0x2d, 0x00, 0x81, 0x07, 0x30, 0x72, 0x78, 0x3c, 0x68, 0x98, 0x73, 0x3c,
0x00, 0x81, 0x36, 0x30, 0x00, 0x82, 0x5f, 0x2d, 0x75, 0x76, 0x39, 0x6e, 0xab, 0x5c, 0x39, 0x00,
0x2c, 0x2d, 0x00, 0x8f, 0x02, 0x2d, 0x73, 0x78, 0x39, 0x68, 0x98, 0x6a, 0x39, 0x00, 0x83, 0x17,
0x2d, 0x00, 0x81, 0x07, 0x30, 0x72, 0x78, 0x3c, 0x68, 0x98, 0x73, 0x3c, 0x00, 0x81, 0x37, 0x30,
0x00, 0x82, 0x5e, 0x2d, 0x75, 0x78, 0x39, 0x6e, 0x8b, 0x20, 0xb0, 0x07, 0x7f, 0x3c, 0x07, 0x7f,
0x83, 0x42, 0x07, 0x7e, 0x5a, 0x07, 0x7d, 0x5a, 0x07, 0x7c, 0x81, 0x16, 0x07, 0x7b, 0x3c, 0x07,
0x7a, 0x3c, 0x07, 0x79, 0x5a, 0x07, 0x78, 0x3c, 0x07, 0x77, 0x1e, 0x07, 0x76, 0x5a, 0x07, 0x75,
0x3c, 0x07, 0x74, 0x1e, 0x07, 0x73, 0x5a, 0x07, 0x72, 0x1e, 0x07, 0x71, 0x1e, 0x07, 0x70, 0x3c,
0x07, 0x6f, 0x1e, 0x07, 0x6e, 0x1e, 0x07, 0x6d, 0x3c, 0x07, 0x6c, 0x1e, 0x07, 0x6b, 0x1e, 0x07,
0x6a, 0x3c, 0x07, 0x69, 0x1e, 0x07, 0x68, 0x1e, 0x07, 0x67, 0x3c, 0x07, 0x66, 0x1e, 0x07, 0x65,
0x3c, 0x07, 0x64, 0x1e, 0x07, 0x62, 0x3c, 0x07, 0x61, 0x1e, 0x07, 0x60, 0x1e, 0x07, 0x5f, 0x1e,
0x07, 0x5e, 0x1e, 0x07, 0x5d, 0x1e, 0x07, 0x5c, 0x1e, 0x07, 0x5b, 0x1e, 0x07, 0x5a, 0x1e, 0x07,
0x59, 0x1e, 0x07, 0x58, 0x1e, 0x07, 0x57, 0x1e, 0x07, 0x56, 0x1e, 0x07, 0x55, 0x1e, 0x07, 0x53,
0x3c, 0x07, 0x51, 0x1e, 0x07, 0x50, 0x1e, 0x07, 0x4f, 0x1e, 0x07, 0x4e, 0x1e, 0x07, 0x4d, 0x1e,
0x07, 0x4b, 0x3c, 0x07, 0x49, 0x1e, 0x07, 0x48, 0x1e, 0x07, 0x47, 0x1e, 0x07, 0x45, 0x1e, 0x07,
0x44, 0x1e, 0x07, 0x43, 0x1e, 0x07, 0x42, 0x1e, 0x07, 0x40, 0x1e, 0x07, 0x3f, 0x1e, 0x07, 0x3d,
0x1e, 0x07, 0x3c, 0x1e, 0x07, 0x3b, 0x1e, 0x07, 0x39, 0x1e, 0x07, 0x38, 0x1e, 0x07, 0x36, 0x1e,
0x07, 0x33, 0x1e, 0x07, 0x2e, 0x1e, 0x07, 0x2b, 0x1e, 0x07, 0x26, 0x1e, 0x07, 0x22, 0x1e, 0x07,
0x1f, 0x1e, 0x07, 0x1c, 0x1e, 0x07, 0x19, 0x1e, 0x07, 0x16, 0x1e, 0x07, 0x13, 0x1e, 0x07, 0x11,
0x1e, 0x07, 0x0e, 0x1e, 0x07, 0x0c, 0x1e, 0x07, 0x0a, 0x1e, 0x07, 0x08, 0x1e, 0x07, 0x06, 0x1e,
0x07, 0x05, 0x1e, 0x07, 0x03, 0x1e, 0x07, 0x02, 0x1e, 0x07, 0x01, 0x1e, 0x07, 0x00, 0x3c, 0x07,
0x00, 0x82, 0x3b, 0x90, 0x39, 0x00, 0x2d, 0x2d, 0x00, 0x83, 0x38, 0xb0, 0x07, 0x00, 0x00, 0xff,
0x2f, 0x00, 0x4d, 0x54, 0x72, 0x6b, 0x00, 0x00, 0x05, 0x20, 0x00, 0xff, 0x03, 0x07, 0x4b, 0x61,
0x6c, 0x69, 0x6d, 0x62, 0x61, 0x00, 0xb1, 0x79, 0x00, 0x00, 0x00, 0x79, 0x01, 0x20, 0x00, 0x01,
0x07, 0x46, 0x00, 0xc1, 0x0a, 0x83, 0x5d, 0x91, 0x51, 0x25, 0x7d, 0x51, 0x00, 0x73, 0x51, 0x29,
0x81, 0x05, 0x51, 0x00, 0x6b, 0x54, 0x2c, 0x6a, 0x54, 0x00, 0x81, 0x05, 0x51, 0x2f, 0x81, 0x04,
0x51, 0x00, 0x6c, 0x56, 0x32, 0x79, 0x56, 0x00, 0x81, 0x71, 0x58, 0x36, 0x69, 0x58, 0x00, 0x81,
0x06, 0x58, 0x39, 0x3c, 0x58, 0x00, 0x3d, 0x58, 0x39, 0x81, 0x07, 0x58, 0x00, 0x68, 0x51, 0x3b,
0x76, 0x51, 0x00, 0x7a, 0x51, 0x3d, 0x7f, 0x51, 0x00, 0x71, 0x54, 0x3e, 0x7c, 0x54, 0x00, 0x74,
0x51, 0x3f, 0x81, 0x0a, 0x51, 0x00, 0x66, 0x56, 0x40, 0x7f, 0x56, 0x00, 0x81, 0x69, 0x58, 0x40,
0x67, 0x58, 0x00, 0x81, 0x09, 0x58, 0x40, 0x44, 0x58, 0x00, 0x34, 0x58, 0x40, 0x79, 0x58, 0x00,
0x78, 0x51, 0x40, 0x73, 0x51, 0x00, 0x7d, 0x51, 0x40, 0x6c, 0x51, 0x00, 0x81, 0x03, 0x54, 0x40,
0x6b, 0x54, 0x00, 0x81, 0x06, 0x51, 0x40, 0x81, 0x07, 0x51, 0x00, 0x68, 0x56, 0x40, 0x81, 0x05,
0x56, 0x00, 0x81, 0x63, 0x58, 0x41, 0x77, 0x58, 0x00, 0x7a, 0x58, 0x41, 0x4c, 0x58, 0x00, 0x2b,
0x58, 0x41, 0x7c, 0x58, 0x00, 0x74, 0x51, 0x41, 0x6c, 0x51, 0x00, 0x81, 0x04, 0x51, 0x41, 0x81,
0x05, 0x51, 0x00, 0x6c, 0x54, 0x41, 0x71, 0x54, 0x00, 0x7e, 0x51, 0x42, 0x81, 0x17, 0x51, 0x00,
0x59, 0x56, 0x42, 0x81, 0x08, 0x56, 0x00, 0x81, 0x61, 0x58, 0x42, 0x68, 0x58, 0x00, 0x81, 0x08,
0x58, 0x42, 0x5a, 0x58, 0x00, 0x1d, 0x58, 0x42, 0x73, 0x58, 0x00, 0x7e, 0x51, 0x43, 0x7a, 0x51,
0x00, 0x76, 0x51, 0x43, 0x81, 0x03, 0x51, 0x00, 0x6d, 0x54, 0x43, 0x74, 0x54, 0x00, 0x7b, 0x51,
0x43, 0x78, 0x51, 0x00, 0x79, 0x56, 0x43, 0x81, 0x10, 0x56, 0x00, 0x81, 0x58, 0x58, 0x43, 0x7a,
0x58, 0x00, 0x75, 0x58, 0x43, 0x52, 0x58, 0x00, 0x27, 0x58, 0x43, 0x81, 0x0f, 0x58, 0x00, 0x61,
0x51, 0x43, 0x5e, 0x51, 0x00, 0x81, 0x12, 0x51, 0x43, 0x72, 0x51, 0x00, 0x7d, 0x54, 0x43, 0x73,
0x54, 0x00, 0x7e, 0x51, 0x44, 0x81, 0x0b, 0x51, 0x00, 0x65, 0x56, 0x43, 0x7c, 0x56, 0x00, 0x81,
0x6b, 0x58, 0x43, 0x6e, 0x58, 0x00, 0x81, 0x03, 0x58, 0x43, 0x4d, 0x58, 0x00, 0x2b, 0x58, 0x43,
0x81, 0x18, 0x58, 0x00, 0x58, 0x51, 0x41, 0x65, 0x51, 0x00, 0x81, 0x0a, 0x51, 0x41, 0x66, 0x51,
0x00, 0x81, 0x0b, 0x54, 0x40, 0x63, 0x54, 0x00, 0x81, 0x0d, 0x51, 0x40, 0x7a, 0x51, 0x00, 0x75,
0x56, 0x40, 0x73, 0x56, 0x00, 0x81, 0x76, 0x58, 0x3e, 0x76, 0x58, 0x00, 0x7a, 0x58, 0x3d, 0x62,
0x58, 0x00, 0x16, 0x58, 0x3b, 0x81, 0x0d, 0x58, 0x00, 0x62, 0x51, 0x39, 0x61, 0x51, 0x00, 0x81,
0x10, 0x51, 0x37, 0x65, 0x51, 0x00, 0x81, 0x0b, 0x54, 0x34, 0x6b, 0x54, 0x00, 0x81, 0x04, 0x51,
0x31, 0x6e, 0x51, 0x00, 0x81, 0x03, 0x56, 0x2e, 0x6d, 0x56, 0x00, 0x81, 0x7a, 0x58, 0x27, 0x6a,
0x58, 0x00, 0x81, 0x07, 0x58, 0x23, 0x55, 0x58, 0x00, 0x23, 0x58, 0x21, 0x7c, 0x58, 0x00, 0x73,
0x51, 0x25, 0x7d, 0x51, 0x00, 0x73, 0x51, 0x29, 0x81, 0x05, 0x51, 0x00, 0x6b, 0x54, 0x2c, 0x6a,
0x54, 0x00, 0x81, 0x06, 0x51, 0x2f, 0x81, 0x04, 0x51, 0x00, 0x6c, 0x56, 0x32, 0x79, 0x56, 0x00,
0x81, 0x6f, 0x58, 0x36, 0x6a, 0x58, 0x00, 0x81, 0x06, 0x58, 0x39, 0x3c, 0x58, 0x00, 0x3c, 0x58,
0x39, 0x81, 0x08, 0x58, 0x00, 0x68, 0x51, 0x3b, 0x77, 0x51, 0x00, 0x78, 0x51, 0x3d, 0x7f, 0x51,
0x00, 0x71, 0x54, 0x3e, 0x7c, 0x54, 0x00, 0x74, 0x51, 0x3f, 0x81, 0x0a, 0x51, 0x00, 0x66, 0x56,
0x40, 0x7f, 0x56, 0x00, 0x81, 0x69, 0x58, 0x40, 0x68, 0x58, 0x00, 0x81, 0x08, 0x58, 0x40, 0x44,
0x58, 0x00, 0x34, 0x58, 0x40, 0x79, 0x58, 0x00, 0x77, 0x51, 0x40, 0x74, 0x51, 0x00, 0x7c, 0x51,
0x40, 0x6d, 0x51, 0x00, 0x81, 0x03, 0x54, 0x40, 0x6b, 0x54, 0x00, 0x81, 0x05, 0x51, 0x40, 0x81,
0x08, 0x51, 0x00, 0x68, 0x56, 0x40, 0x81, 0x05, 0x56, 0x00, 0x81, 0x63, 0x58, 0x41, 0x77, 0x58,
0x00, 0x79, 0x58, 0x41, 0x4d, 0x58, 0x00, 0x2b, 0x58, 0x41, 0x7c, 0x58, 0x00, 0x74, 0x51, 0x41,
0x6c, 0x51, 0x00, 0x81, 0x04, 0x51, 0x41, 0x81, 0x05, 0x51, 0x00, 0x6b, 0x54, 0x41, 0x73, 0x54,
0x00, 0x7d, 0x51, 0x42, 0x81, 0x17, 0x51, 0x00, 0x59, 0x56, 0x42, 0x81, 0x08, 0x56, 0x00, 0x81,
0x60, 0x58, 0x42, 0x69, 0x58, 0x00, 0x81, 0x07, 0x58, 0x42, 0x5c, 0x58, 0x00, 0x1c, 0x58, 0x42,
0x73, 0x58, 0x00, 0x7d, 0x51, 0x43, 0x7b, 0x51, 0x00, 0x75, 0x51, 0x43, 0x81, 0x04, 0x51, 0x00,
0x6c, 0x54, 0x43, 0x75, 0x54, 0x00, 0x7b, 0x51, 0x43, 0x78, 0x51, 0x00, 0x78, 0x56, 0x43, 0x81,
0x11, 0x56, 0x00, 0x81, 0x57, 0x58, 0x43, 0x7c, 0x58, 0x00, 0x74, 0x58, 0x43, 0x52, 0x58, 0x00,
0x26, 0x58, 0x43, 0x81, 0x10, 0x58, 0x00, 0x60, 0x51, 0x43, 0x61, 0x51, 0x00, 0x81, 0x0f, 0x51,
0x43, 0x73, 0x51, 0x00, 0x7d, 0x54, 0x43, 0x73, 0x54, 0x00, 0x7d, 0x51, 0x44, 0x81, 0x0e, 0x51,
0x00, 0x62, 0x56, 0x43, 0x7d, 0x56, 0x00, 0x81, 0x6b, 0x58, 0x43, 0x70, 0x58, 0x00, 0x81, 0x00,
0x58, 0x43, 0x4f, 0x58, 0x00, 0x29, 0x58, 0x43, 0x81, 0x19, 0x58, 0x00, 0x57, 0x51, 0x41, 0x66,
0x51, 0x00, 0x81, 0x0a, 0x51, 0x41, 0x66, 0x51, 0x00, 0x81, 0x0a, 0x54, 0x40, 0x64, 0x54, 0x00,
0x81, 0x0c, 0x51, 0x40, 0x7b, 0x51, 0x00, 0x75, 0x56, 0x40, 0x73, 0x56, 0x00, 0x81, 0x75, 0x58,
0x3e, 0x77, 0x58, 0x00, 0x79, 0x58, 0x3d, 0x63, 0x58, 0x00, 0x15, 0x58, 0x3b, 0x81, 0x0f, 0x58,
0x00, 0x61, 0x51, 0x39, 0x61, 0x51, 0x00, 0x81, 0x0f, 0x51, 0x37, 0x66, 0x51, 0x00, 0x81, 0x0a,
0x54, 0x34, 0x6c, 0x54, 0x00, 0x81, 0x04, 0x51, 0x31, 0x6e, 0x51, 0x00, 0x81, 0x02, 0x56, 0x2e,
0x6f, 0x56, 0x00, 0x81, 0x79, 0x58, 0x27, 0x6a, 0x58, 0x00, 0x81, 0x07, 0x58, 0x23, 0x55, 0x58,
0x00, 0x23, 0x58, 0x21, 0x7e, 0x58, 0x00, 0x73, 0x51, 0x3e, 0x7d, 0x51, 0x00, 0x73, 0x51, 0x3e,
0x81, 0x03, 0x51, 0x00, 0x6d, 0x54, 0x3e, 0x69, 0x54, 0x00, 0x81, 0x07, 0x51, 0x3e, 0x81, 0x03,
0x51, 0x00, 0x6d, 0x56, 0x3e, 0x78, 0x56, 0x00, 0x81, 0x70, 0x58, 0x3e, 0x69, 0x58, 0x00, 0x81,
0x07, 0x58, 0x3e, 0x3b, 0x58, 0x00, 0x3d, 0x58, 0x3f, 0x81, 0x07, 0x58, 0x00, 0x69, 0x51, 0x3f,
0x76, 0x51, 0x00, 0x7a, 0x51, 0x3f, 0x7e, 0x51, 0x00, 0x72, 0x54, 0x3f, 0x7b, 0x54, 0x00, 0x75,
0x51, 0x3f, 0x81, 0x09, 0x51, 0x00, 0x67, 0x56, 0x3f, 0x7e, 0x56, 0x00, 0x81, 0x6a, 0x58, 0x40,
0x67, 0x58, 0x00, 0x81, 0x09, 0x58, 0x40, 0x43, 0x58, 0x00, 0x35, 0x58, 0x40, 0x78, 0x58, 0x00,
0x78, 0x51, 0x40, 0x73, 0x51, 0x00, 0x7d, 0x51, 0x40, 0x6c, 0x51, 0x00, 0x81, 0x04, 0x54, 0x40,
0x6a, 0x54, 0x00, 0x81, 0x06, 0x51, 0x40, 0x81, 0x07, 0x51, 0x00, 0x69, 0x56, 0x40, 0x81, 0x03,
0x56, 0x00, 0x81, 0x64, 0x58, 0x41, 0x76, 0x58, 0x00, 0x7a, 0x58, 0x41, 0x4d, 0x58, 0x00, 0x2c,
0x58, 0x41, 0x7b, 0x58, 0x00, 0x75, 0x51, 0x41, 0x6b, 0x51, 0x00, 0x81, 0x04, 0x51, 0x41, 0x81,
0x04, 0x51, 0x00, 0x6c, 0x54, 0x41, 0x73, 0x54, 0x00, 0x7e, 0x51, 0x42, 0x81, 0x16, 0x51, 0x00,
0x5a, 0x56, 0x42, 0x81, 0x07, 0x56, 0x00, 0x81, 0x61, 0x58, 0x42, 0x68, 0x58, 0x00, 0x81, 0x08,
0x58, 0x42, 0x5b, 0x58, 0x00, 0x1d, 0x58, 0x42, 0x72, 0x58, 0x00, 0x7d, 0x51, 0x43, 0x7b, 0x51,
0x00, 0x76, 0x51, 0x43, 0x81, 0x03, 0x51, 0x00, 0x6d, 0x54, 0x43, 0x74, 0x54, 0x00, 0x7c, 0x51,
0x43, 0x77, 0x51, 0x00, 0x79, 0x56, 0x43, 0x81, 0x10, 0x56, 0x00, 0x81, 0x58, 0x58, 0x43, 0x7b,
0x58, 0x00, 0x75, 0x58, 0x43, 0x51, 0x58, 0x00, 0x26, 0x58, 0x43, 0x81, 0x10, 0x58, 0x00, 0x61,
0x51, 0x43, 0x5e, 0x51, 0x00, 0x81, 0x12, 0x51, 0x43, 0x72, 0x51, 0x00, 0x7e, 0x54, 0x43, 0x72,
0x54, 0x00, 0x7e, 0x51, 0x44, 0x81, 0x0b, 0x51, 0x00, 0x64, 0x56, 0x43, 0x7d, 0x56, 0x00, 0x81,
0x6c, 0x58, 0x43, 0x6d, 0x58, 0x00, 0x81, 0x03, 0x58, 0x43, 0x4e, 0x58, 0x00, 0x2a, 0x58, 0x43,
0x81, 0x18, 0x58, 0x00, 0x58, 0x51, 0x41, 0x65, 0x51, 0x00, 0x81, 0x0b, 0x51, 0x41, 0x65, 0x51,
0x00, 0x81, 0x0b, 0x54, 0x40, 0x63, 0x54, 0x00, 0x81, 0x0c, 0x51, 0x3e, 0x7b, 0x51, 0x00, 0x76,
0x56, 0x3b, 0x72, 0x56, 0x00, 0x81, 0x76, 0x58, 0x37, 0x75, 0x58, 0x00, 0x7a, 0x58, 0x35, 0x63,
0x58, 0x00, 0x16, 0x58, 0x34, 0x81, 0x0e, 0x58, 0x00, 0x62, 0x51, 0x31, 0x60, 0x51, 0x00, 0x81,
0x10, 0x51, 0x2f, 0x65, 0x51, 0x00, 0x81, 0x0a, 0x54, 0x2c, 0x6c, 0x54, 0x00, 0x81, 0x05, 0x51,
0x2a, 0x6d, 0x51, 0x00, 0x81, 0x02, 0x56, 0x28, 0x6e, 0x56, 0x00, 0x81, 0x7a, 0x58, 0x25, 0x6a,
0x58, 0x00, 0x81, 0x07, 0x58, 0x22, 0x55, 0x58, 0x00, 0x23, 0x58, 0x21, 0x7c, 0x58, 0x00, 0x8a,
0x24, 0x37, 0x00, 0x1e, 0x37, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x4d, 0x54, 0x72, 0x6b, 0x00, 0x00,
0x01, 0xb3, 0x00, 0xff, 0x03, 0x05, 0x42, 0x61, 0x6e, 0x6a, 0x6f, 0x00, 0xb3, 0x79, 0x00, 0x00,
0x00, 0x79, 0x01, 0x20, 0x00, 0x01, 0x07, 0x7f, 0x00, 0xc3, 0x05, 0x83, 0x5d, 0x93, 0x65, 0x7f,
0x81, 0x5f, 0x65, 0x00, 0x83, 0x70, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x4f, 0x3d, 0x64,
0x00, 0x3b, 0x64, 0x41, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x34, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x26,
0x3c, 0x64, 0x00, 0x3c, 0x64, 0x18, 0x3c, 0x64, 0x00, 0x93, 0x1e, 0x65, 0x7f, 0x81, 0x4a, 0x65,
0x00, 0x84, 0x06, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x4f, 0x3b, 0x64, 0x00, 0x3c, 0x64,
0x43, 0x3c, 0x64, 0x00, 0x3d, 0x64, 0x36, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x2a, 0x3c, 0x64, 0x00,
0x3b, 0x64, 0x1d, 0x3c, 0x64, 0x00, 0x93, 0x1d, 0x65, 0x7f, 0x81, 0x5e, 0x65, 0x00, 0x83, 0x71,
0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3d, 0x64, 0x4d, 0x3c, 0x64, 0x00, 0x3b, 0x64, 0x42, 0x3d, 0x64,
0x00, 0x3b, 0x64, 0x36, 0x3c, 0x64, 0x00, 0x3d, 0x64, 0x2b, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x20,
0x3c, 0x64, 0x00, 0xb1, 0x1c, 0x65, 0x7f, 0x81, 0x5e, 0x65, 0x00, 0x83, 0x72, 0x64, 0x7f, 0x3c,
0x64, 0x00, 0x3c, 0x64, 0x4f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x41, 0x3c, 0x64, 0x00, 0x3c, 0x64,
0x34, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x26, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x18, 0x3c, 0x64, 0x00,
0x93, 0x1c, 0x65, 0x7f, 0x81, 0x4a, 0x65, 0x00, 0x84, 0x06, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c,
0x64, 0x4f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x43, 0x3a, 0x64, 0x00, 0x3e, 0x64, 0x36, 0x3c, 0x64,
0x00, 0x3a, 0x64, 0x2a, 0x3c, 0x64, 0x00, 0x3e, 0x64, 0x1c, 0x3c, 0x64, 0x00, 0x93, 0x1c, 0x65,
0x7f, 0x81, 0x5e, 0x65, 0x00, 0x83, 0x70, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3e, 0x64, 0x4d, 0x3c,
0x64, 0x00, 0x3a, 0x64, 0x42, 0x3c, 0x64, 0x00, 0x3e, 0x64, 0x36, 0x3c, 0x64, 0x00, 0x3c, 0x64,
0x2b, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x20, 0x3a, 0x64, 0x00, 0xb1, 0x1e, 0x65, 0x7f, 0x81, 0x5d,
0x65, 0x00, 0x83, 0x73, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x4f, 0x3c, 0x64, 0x00, 0x3c,
0x64, 0x41, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x34, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x26, 0x3c, 0x64,
0x00, 0x3c, 0x64, 0x18, 0x3c, 0x64, 0x00, 0x93, 0x1c, 0x65, 0x7f, 0x81, 0x4a, 0x65, 0x00, 0x84,
0x06, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x4f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x43, 0x3c,
0x64, 0x00, 0x3c, 0x64, 0x36, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x2a, 0x3c, 0x64, 0x00, 0x3c, 0x64,
0x1d, 0x3c, 0x64, 0x00, 0x93, 0x1c, 0x65, 0x7f, 0x81, 0x5d, 0x65, 0x00, 0x83, 0x73, 0x64, 0x7f,
0x3c, 0x64, 0x00, 0x3c, 0x64, 0x4d, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x42, 0x3c, 0x64, 0x00, 0x3c,
0x64, 0x36, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x2b, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x20, 0x3c, 0x64,
0x00, 0x00, 0xff, 0x2f, 0x00, 0x4d, 0x54, 0x72, 0x6b, 0x00, 0x00, 0x01, 0xb5, 0x00, 0xff, 0x03,
0x07, 0x4d, 0x49, 0x44, 0x49, 0x20, 0x30, 0x35, 0x00, 0xb4, 0x79, 0x00, 0x00, 0x00, 0x79, 0x01,
0x20, 0x00, 0x01, 0x07, 0x7f, 0x00, 0xc4, 0x70, 0x83, 0x5d, 0x94, 0x65, 0x7f, 0x81, 0x5f, 0x65,
0x00, 0x83, 0x70, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x5b, 0x3c, 0x64, 0x00, 0x3c, 0x64,
0x4d, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x3e, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x30, 0x3c, 0x64, 0x00,
0x3c, 0x64, 0x22, 0x3c, 0x64, 0x00, 0x93, 0x1d, 0x65, 0x7f, 0x81, 0x4b, 0x65, 0x00, 0x84, 0x05,
0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x5c, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x4f, 0x3c, 0x64,
0x00, 0x3c, 0x64, 0x42, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x35, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x28,
0x3c, 0x64, 0x00, 0x93, 0x1c, 0x65, 0x7f, 0x81, 0x5f, 0x65, 0x00, 0x83, 0x71, 0x64, 0x7f, 0x3c,
0x64, 0x00, 0x3c, 0x64, 0x5d, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x51, 0x3c, 0x64, 0x00, 0x3c, 0x64,
0x45, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x39, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x2c, 0x3d, 0x64, 0x00,
0xb1, 0x1b, 0x65, 0x7f, 0x81, 0x5f, 0x65, 0x00, 0x83, 0x71, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c,
0x64, 0x5b, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x4d, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x3e, 0x3c, 0x64,
0x00, 0x3c, 0x64, 0x30, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x22, 0x3c, 0x64, 0x00, 0x93, 0x1b, 0x65,
0x7f, 0x81, 0x4b, 0x65, 0x00, 0x84, 0x05, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x5c, 0x3c,
0x64, 0x00, 0x3e, 0x64, 0x4f, 0x3a, 0x64, 0x00, 0x3c, 0x64, 0x42, 0x3d, 0x64, 0x00, 0x3b, 0x64,
0x35, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x28, 0x3d, 0x64, 0x00, 0x93, 0x1b, 0x65, 0x7f, 0x81, 0x5f,
0x65, 0x00, 0x83, 0x71, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x5d, 0x3d, 0x64, 0x00, 0x3b,
0x64, 0x51, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x45, 0x3c, 0x64, 0x00, 0x3e, 0x64, 0x39, 0x3c, 0x64,
0x00, 0x3c, 0x64, 0x2c, 0x3a, 0x64, 0x00, 0xb1, 0x1e, 0x65, 0x7f, 0x81, 0x5d, 0x65, 0x00, 0x83,
0x73, 0x64, 0x7f, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x5b, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x4d, 0x3c,
0x64, 0x00, 0x3c, 0x64, 0x3e, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x30, 0x3c, 0x64, 0x00, 0x3c, 0x64,
0x22, 0x3c, 0x64, 0x00, 0x93, 0x1c, 0x65, 0x7f, 0x81, 0x4a, 0x65, 0x00, 0x84, 0x06, 0x64, 0x7f,
0x3c, 0x64, 0x00, 0x3c, 0x64, 0x5c, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x4f, 0x3c, 0x64, 0x00, 0x3c,
0x64, 0x42, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x35, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x28, 0x3c, 0x64,
0x00, 0x93, 0x1c, 0x65, 0x7f, 0x81, 0x5d, 0x65, 0x00, 0x83, 0x73, 0x64, 0x7f, 0x3c, 0x64, 0x00,
0x3c, 0x64, 0x5d, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x51, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x45, 0x3c,
0x64, 0x00, 0x3c, 0x64, 0x39, 0x3c, 0x64, 0x00, 0x3c, 0x64, 0x2c, 0x3c, 0x64, 0x00, 0x00, 0xff,
0x2f, 0x00, 0x4d, 0x54, 0x72, 0x6b, 0x00, 0x00, 0x00, 0x77, 0x00, 0xff, 0x03, 0x08, 0x50, 0x69,
0x63, 0x6b, 0x42, 0x61, 0x73, 0x73, 0x00, 0xb5, 0x79, 0x00, 0x00, 0x00, 0x79, 0x01, 0x20, 0x00,
0x01, 0x07, 0x6e, 0x00, 0xc5, 0x22, 0xfb, 0x5d, 0x95, 0x2d, 0x5c, 0x85, 0x50, 0x34, 0x5e, 0x3c,
0x2d, 0x00, 0x97, 0x73, 0x34, 0x00, 0x00, 0x2d, 0x70, 0x85, 0x50, 0x30, 0x63, 0x27, 0x2d, 0x00,
0x97, 0x7c, 0x30, 0x00, 0x0d, 0x2d, 0x70, 0x85, 0x50, 0x34, 0x64, 0x52, 0x2d, 0x00, 0xa1, 0x6f,
0x34, 0x00, 0x93, 0x71, 0x2d, 0x5c, 0x85, 0x50, 0x34, 0x5e, 0x3c, 0x2d, 0x00, 0x97, 0x74, 0x34,
0x00, 0x00, 0x2d, 0x70, 0x85, 0x50, 0x30, 0x63, 0x26, 0x2d, 0x00, 0x97, 0x7c, 0x30, 0x00, 0x0e,
0x2d, 0x70, 0x85, 0x50, 0x34, 0x64, 0x4f, 0x2d, 0x00, 0xa1, 0x6f, 0x34, 0x00, 0x00, 0xff, 0x2f,
0x00, 0x4d, 0x54, 0x72, 0x6b, 0x00, 0x00, 0x01, 0xa3, 0x00, 0xff, 0x03, 0x09, 0x52, 0x65, 0x76,
0x43, 0x79, 0x6d, 0x62, 0x61, 0x6c, 0x00, 0xb6, 0x79, 0x00, 0x00, 0x00, 0x79, 0x01, 0x20, 0x00,
0x01, 0xc6, 0x7a, 0x38, 0xb6, 0x07, 0x00, 0x81, 0x35, 0x07, 0x7f, 0x81, 0x70, 0x96, 0x4c, 0x0c,
0x87, 0x3f, 0x4c, 0x00, 0x00, 0x4c, 0x18, 0x87, 0x41, 0x4c, 0x00, 0x00, 0x4c, 0x24, 0x87, 0x40,
0x4c, 0x00, 0x00, 0x4c, 0x31, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x3d, 0x87, 0x40, 0x4c, 0x00,
0x00, 0x4c, 0x37, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x31, 0x87, 0x40, 0x4c, 0x00, 0x01, 0x4c,
0x2c, 0x87, 0x3f, 0x4c, 0x27, 0x01, 0x4c, 0x00, 0x87, 0x3f, 0x4c, 0x00, 0x00, 0x4c, 0x22, 0x87,
0x40, 0x4c, 0x00, 0x01, 0x4c, 0x1d, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x18, 0x87, 0x40, 0x4c,
0x00, 0x00, 0x4c, 0x13, 0x87, 0x3f, 0x4c, 0x0e, 0x01, 0x4c, 0x00, 0x87, 0x3f, 0x4c, 0x00, 0x00,
0x4c, 0x09, 0x87, 0x40, 0x4c, 0x00, 0x01, 0x4c, 0x04, 0x87, 0x3f, 0x4c, 0x0c, 0x01, 0x4c, 0x00,
0x87, 0x3f, 0x4c, 0x00, 0x00, 0x4c, 0x18, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x24, 0x87, 0x3f,
0x4c, 0x00, 0x00, 0x4c, 0x31, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x3d, 0x87, 0x40, 0x4c, 0x00,
0x02, 0x4c, 0x37, 0x87, 0x3e, 0x4c, 0x31, 0x02, 0x4c, 0x00, 0x87, 0x3e, 0x4c, 0x00, 0x00, 0x4c,
0x2c, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x27, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x22, 0x87,
0x40, 0x4c, 0x00, 0x02, 0x4c, 0x1d, 0x87, 0x3e, 0x4c, 0x18, 0x02, 0x4c, 0x00, 0x87, 0x3e, 0x4c,
0x00, 0x00, 0x4c, 0x13, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x0e, 0x87, 0x40, 0x4c, 0x00, 0x00,
0x4c, 0x09, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x04, 0x87, 0x40, 0x4c, 0x00, 0x02, 0x4c, 0x0c,
0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x18, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x24, 0x87, 0x40,
0x4c, 0x00, 0x00, 0x4c, 0x31, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x3d, 0x87, 0x40, 0x4c, 0x00,
0x00, 0x4c, 0x37, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x31, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c,
0x2c, 0x87, 0x3f, 0x4c, 0x27, 0x01, 0x4c, 0x00, 0x87, 0x3f, 0x4c, 0x00, 0x01, 0x4c, 0x22, 0x87,
0x40, 0x4c, 0x00, 0x00, 0x4c, 0x1d, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x18, 0x87, 0x40, 0x4c,
0x00, 0x00, 0x4c, 0x13, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x0e, 0x87, 0x40, 0x4c, 0x00, 0x00,
0x4c, 0x09, 0x87, 0x40, 0x4c, 0x00, 0x00, 0x4c, 0x04, 0x84, 0x3a, 0xb6, 0x07, 0x7c, 0x1e, 0x07,
0x72, 0x1e, 0x07, 0x67, 0x1e, 0x07, 0x5d, 0x1e, 0x07, 0x53, 0x1e, 0x07, 0x48, 0x1e, 0x07, 0x3d,
0x1e, 0x07, 0x33, 0x1e, 0x07, 0x28, 0x1e, 0x07, 0x1e, 0x1e, 0x07, 0x14, 0x1e, 0x07, 0x00, 0x3c,
0x96, 0x4c, 0x00, 0x86, 0x48, 0xb6, 0x07, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x4d, 0x54, 0x72, 0x6b,
0x00, 0x00, 0x02, 0xd8, 0x00, 0xff, 0x03, 0x0a, 0x50, 0x65, 0x72, 0x63, 0x75, 0x73, 0x73, 0x69,
0x6f, 0x6e, 0x00, 0xb9, 0x79, 0x00, 0x00, 0x00, 0x78, 0x01, 0x20, 0x00, 0x01, 0x07, 0x7f, 0x00,
0xc9, 0x00, 0xfb, 0x5d, 0x99, 0x4c, 0x64, 0x00, 0x24, 0x64, 0x78, 0x4c, 0x00, 0x81, 0x2e, 0x24,
0x00, 0x81, 0x3a, 0x2c, 0x64, 0x81, 0x51, 0x2c, 0x00, 0x82, 0x0f, 0x4b, 0x64, 0x78, 0x4b, 0x00,
0x78, 0x2c, 0x64, 0x78, 0x4c, 0x64, 0x63, 0x2c, 0x00, 0x15, 0x4c, 0x00, 0x78, 0x4b, 0x64, 0x78,
0x4b, 0x00, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x78, 0x4c, 0x64, 0x00, 0x24, 0x64, 0x78, 0x4c,
0x00, 0x81, 0x1e, 0x24, 0x00, 0x81, 0x49, 0x2c, 0x64, 0x81, 0x6d, 0x2c, 0x00, 0x81, 0x73, 0x4b,
0x64, 0x78, 0x4b, 0x00, 0x78, 0x2c, 0x64, 0x81, 0x64, 0x2c, 0x00, 0x83, 0x6c, 0x4c, 0x64, 0x00,
0x24, 0x64, 0x78, 0x4c, 0x00, 0x81, 0x18, 0x24, 0x00, 0x81, 0x50, 0x2c, 0x64, 0x81, 0x54, 0x2c,
0x00, 0x82, 0x0c, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x78, 0x2c, 0x64, 0x78, 0x4c, 0x64, 0x70, 0x2c,
0x00, 0x08, 0x4c, 0x00, 0x78, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00,
0x78, 0x24, 0x64, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x81, 0x1b, 0x24, 0x00, 0x81, 0x4d, 0x2c,
0x64, 0x81, 0x65, 0x2c, 0x00, 0x81, 0x7b, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x78, 0x2c, 0x64, 0x81,
0x5d, 0x2c, 0x00, 0x83, 0x73, 0x24, 0x64, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x81, 0x0c, 0x24,
0x00, 0x81, 0x5c, 0x2c, 0x64, 0x81, 0x71, 0x2c, 0x00, 0x81, 0x6f, 0x4b, 0x64, 0x78, 0x4b, 0x00,
0x78, 0x2c, 0x64, 0x78, 0x4c, 0x64, 0x72, 0x2c, 0x00, 0x06, 0x4c, 0x00, 0x78, 0x4b, 0x64, 0x78,
0x4b, 0x00, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x78, 0x24, 0x64, 0x00, 0x4c, 0x64, 0x78, 0x4c,
0x00, 0x81, 0x09, 0x24, 0x00, 0x81, 0x5f, 0x2c, 0x64, 0x81, 0x79, 0x2c, 0x00, 0x81, 0x67, 0x4b,
0x64, 0x78, 0x4b, 0x00, 0x78, 0x2c, 0x64, 0x81, 0x6a, 0x2c, 0x00, 0x83, 0x66, 0x24, 0x64, 0x00,
0x4c, 0x64, 0x78, 0x4c, 0x00, 0x7c, 0x24, 0x00, 0x81, 0x6c, 0x2c, 0x64, 0x81, 0x6a, 0x2c, 0x00,
0x81, 0x76, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x78, 0x2c, 0x64, 0x78, 0x4c, 0x64, 0x63, 0x2c, 0x00,
0x15, 0x4c, 0x00, 0x78, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x78,
0x24, 0x64, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x7d, 0x24, 0x00, 0x81, 0x6b, 0x2c, 0x64, 0x81,
0x64, 0x2c, 0x00, 0x81, 0x7c, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x78, 0x2c, 0x64, 0x81, 0x4a, 0x2c,
0x00, 0x84, 0x08, 0x4c, 0x64, 0x00, 0x24, 0x64, 0x78, 0x4c, 0x00, 0x81, 0x2d, 0x24, 0x00, 0x81,
0x3b, 0x2c, 0x64, 0x81, 0x50, 0x2c, 0x00, 0x82, 0x10, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x78, 0x2c,
0x64, 0x78, 0x4c, 0x64, 0x62, 0x2c, 0x00, 0x16, 0x4c, 0x00, 0x78, 0x4b, 0x64, 0x78, 0x4b, 0x00,
0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x78, 0x4c, 0x64, 0x00, 0x24, 0x64, 0x78, 0x4c, 0x00, 0x81,
0x1d, 0x24, 0x00, 0x81, 0x4b, 0x2c, 0x64, 0x81, 0x6c, 0x2c, 0x00, 0x81, 0x74, 0x4b, 0x64, 0x78,
0x4b, 0x00, 0x78, 0x2c, 0x64, 0x81, 0x63, 0x2c, 0x00, 0x83, 0x6d, 0x4c, 0x64, 0x00, 0x24, 0x64,
0x78, 0x4c, 0x00, 0x81, 0x17, 0x24, 0x00, 0x81, 0x51, 0x2c, 0x64, 0x81, 0x53, 0x2c, 0x00, 0x82,
0x0d, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x78, 0x2c, 0x64, 0x77, 0x4c, 0x64, 0x6e, 0x2c, 0x00, 0x0a,
0x4c, 0x00, 0x78, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x01, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x78, 0x24,
0x64, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x81, 0x1a, 0x24, 0x00, 0x81, 0x4d, 0x2c, 0x64, 0x81,
0x65, 0x2c, 0x00, 0x81, 0x7c, 0x4b, 0x64, 0x77, 0x4b, 0x00, 0x79, 0x2c, 0x64, 0x81, 0x5c, 0x2c,
0x00, 0x83, 0x73, 0x24, 0x64, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x81, 0x0c, 0x24, 0x00, 0x81,
0x5d, 0x2c, 0x64, 0x81, 0x70, 0x2c, 0x00, 0x81, 0x70, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x77, 0x2c,
0x64, 0x79, 0x4c, 0x64, 0x71, 0x2c, 0x00, 0x07, 0x4c, 0x00, 0x78, 0x4b, 0x64, 0x77, 0x4b, 0x00,
0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x79, 0x24, 0x64, 0x00, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x81,
0x08, 0x24, 0x00, 0x81, 0x60, 0x2c, 0x64, 0x81, 0x78, 0x2c, 0x00, 0x81, 0x67, 0x4b, 0x64, 0x78,
0x4b, 0x00, 0x79, 0x2c, 0x64, 0x81, 0x69, 0x2c, 0x00, 0x83, 0x67, 0x24, 0x64, 0x00, 0x4c, 0x64,
0x78, 0x4c, 0x00, 0x7b, 0x24, 0x00, 0x81, 0x6d, 0x2c, 0x64, 0x81, 0x69, 0x2c, 0x00, 0x81, 0x77,
0x4b, 0x64, 0x78, 0x4b, 0x00, 0x77, 0x2c, 0x64, 0x79, 0x4c, 0x64, 0x62, 0x2c, 0x00, 0x16, 0x4c,
0x00, 0x77, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x01, 0x4c, 0x64, 0x78, 0x4c, 0x00, 0x78, 0x24, 0x64,
0x00, 0x4c, 0x64, 0x77, 0x4c, 0x00, 0x7d, 0x24, 0x00, 0x81, 0x6b, 0x2c, 0x64, 0x81, 0x64, 0x2c,
0x00, 0x81, 0x7c, 0x4b, 0x64, 0x78, 0x4b, 0x00, 0x00, 0xff, 0x2f, 0x00
};

int main(void)
{
FILE *pF;


pF=fopen((char *)"D:\\mymid.mid","ab");
if (NULL==pF)
{
printf("open write file error!!");
return 1;
}

for (int i = 0; i < sizeof(aa); i++)
{
putc(aa[i], pF);
}

fclose(pF);
return 0;
}

<think>我们正在讨论参数存储方式的选择:数组(内存中) vs 文件(磁盘上)。根据用户的问题,他需要决定在什么情况下使用数组存储参数,什么情况下使用文件存储参数。 首先,我们需要明确两种存储方式的优缺点: 1. **数组(内存存储)**: - 优点:读写速度快(内存访问速度远高于磁盘),使用方便(直接通过变量名访问),适合频繁访问的数据。 - 缺点:数据易失(程序退出后数据丢失),受内存大小限制(不适合存储非常大的数据)。 2. **文件(磁盘存储)**: - 优点:数据持久化(程序退出后仍存在),存储容量大(受磁盘空间限制),适合长期保存或共享数据。 - 缺点:读写速度慢(磁盘I/O是瓶颈),使用相对复杂(需要序列化和反序列化,管理文件路径等)。 接下来,根据引用内容,我们可以得到一些启示: - 引用[1]提到:结构化数组可以用于将数据写成定长记录字节流(即文件),这是C/C++中常见的数据序列化手段。但要注意,使用文件(如`np.fromfile`)需要知道文件格式。 - 引用[3]提到:在MATLAB中,使用文件存储变量(如`.mat`文件)需要先保存到磁盘,再用时加载。这种方式涉及磁盘读写,速度会有影响,一般用于保存和导入变量。 因此,我们可以根据以下场景来选择存储方式: - **选择数组存储**: - 当参数需要被频繁访问(例如在循环中多次使用)时。 - 当参数大小适中,不会导致内存不足时。 - 当参数不需要在程序结束后保留时。 - **选择文件存储**: - 当参数需要长期保存(例如配置参数、模型参数等)时。 - 当参数非常大,内存无法容纳时(此时可以考虑分块读取)。 - 当参数需要在多个程序之间共享时。 此外,还可以考虑折中方案: - 使用内存映射文件(如numpy的`memmap`):对于非常大的数组,可以部分加载到内存,同时保持文件持久化。 - 使用数据库:对于结构化参数,数据库可能更合适。 总结建议: 1. 如果参数使用频繁且大小适中,优先选择数组(内存存储)。 2. 如果参数需要持久化、共享或太大,则选择文件存储。 3. 在文件存储中,根据数据结构和访问模式选择合适的格式(如二进制、文本、JSON、HDF5等)。 相关问题: 1. 如何选择合适的数据格式(如二进制、文本、JSON等)来存储参数文件? 2. 在内存有限的情况下,如何处理非常大的参数数组3. 如何安全地管理参数文件的读写以避免数据损坏?</think>### 参数存储方式选择:数组 vs 文件分析 #### 1. 数组存储(内存存储) **适用场景**: - 需要**频繁读写**的参数(如实时计算、迭代算法) - 数据量**小于可用内存**的情况(通常GB级以内) - 需要**高速访问**的场景(内存访问速度比磁盘快10^5倍) - 临时性数据(如程序运行时中间状态) **优势**: - ⚡️ **超高速访问**:直接内存操作,无I/O延迟 - 🔄 **易用性强**:编程语言原生支持(如Python的list/dict, NumPy数组) - 🧩 **灵活修改**:支持随机访问和动态更新 **局限**: - 💾 **易失性存储**:程序退出后数据丢失 - 📏 **容量受限**:受物理内存大小约束 - 🔒 **共享困难**:多进程/多机访问需额外机制 > *示例代码(Python数组存储):* ```python config_params = { "learning_rate": 0.01, "batch_size": 64, "hidden_layers": [128, 64] } ``` #### 2. 文件存储(磁盘存储) **适用场景**: - 需要**长期持久化**的参数(如模型配置) - **超大容量**数据(超过内存大小) - **跨会话/跨程序**共享数据 - **备份/版本控制**需求 **优势**: - 💽 **持久化存储**:程序重启后数据保留 - 🌐 **共享便捷**:可通过网络/文件系统共享 - 📦 **大容量支持**:仅受磁盘空间限制 - 🔍 **可读性**:文本格式(如JSON)可直接查看 **局限**: - 🐢 **访问速度慢**:磁盘I/O成为瓶颈 - ⚠️ **管理复杂度**:需处理序列化/反序列化 - 🛡️ **安全风险**:需额外权限控制 > *示例代码(文件存储):* ```python import json # 保存参数 with open("config.json", "w") as f: json.dump({"learning_rate": 0.01}, f) # 读取参数 with open("config.json") as f: params = json.load(f) ``` #### 3. 决策建议表 | 考量维度 | 推荐选择 | 说明 | |-------------------|-------------------|-------------------------------| | **访问频率** | 数组 > 文件 | 高频访问首选内存 | | **数据持久性** | 文件 > 数组 | 长期保存必须用文件 | | **数据规模** | 小:数组/大:文件 | >10GB数据建议文件存储 | | **共享需求** | 文件 > 数组 | 跨进程共享文件更便捷[^1] | | **开发复杂度** | 数组 > 文件 | 内存操作更简单 | | **安全性要求** | 文件 > 数组 | 文件可加密/权限控制[^2] | #### 4. 混合存储策略 对于复杂场景,推荐组合方案: 1. **热数据加载**:启动时从文件加载参数到内存数组 2. **异步持久化**:修改时同步内存,定时/触发保存到文件 3. **内存映射文件**:使用`np.memmap`等实现大文件部分加载 ```python import numpy as np # 创建内存映射文件 data = np.memmap("large_params.dat", dtype=&#39;float32&#39;, mode=&#39;w+&#39;, shape=(1000000,)) ``` > 当参数需要**跨语言使用**(如C++调用Python生成的数据)时,二进制文件存储是最可靠的跨平台方案[^1] ### 📌 最终建议 - **选择数组**:当参数需要频繁修改+数据量小+无需持久化 - **选择文件**:当参数需要长期保存+跨会话共享+数据量超大 - **优先内存**:性能敏感场景默认使用数组,仅在必要时持久化到文件[^3] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值