我只是从 C++ 开始,并且很难理解某些事情。我有一个 MIDI 文件,我想检索十六进制字符串,详见此处。
如何从读入 C++ 程序的 MIDI 文件中提取十六进制信息字符串?
main(){
ifstream::pos_type size;
char * memblock;
ifstream file ("Dvorak_NewWorld.mid", ios::in|ios::binary|ios::ate);
ofstream output;
output.open("output.txt");
if (file.is_open())
{
size = file.tellg();
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
cout << "the complete file content is in memory" << endl;
std::string tohexed = toHex(std::string(memblock, size), true);
output << tohexed << std::endl;
output.close();
}
return 0;
}
string toHex(const string& s, bool upper_case)
{
ostringstream ret;
for (string::size_type i = 0; i < s.length(); ++i)
ret << std::hex << std::setfill('0') << std::setw(2) << (upper_case ? std::uppercase : std::nouppercase) << (int)s[i];
return ret.str();
}
字节数组是字节数组……据我所知,MIDI 数据没有特定的类型。不知道您正在使用什么操作系统,很难说出要使用哪些特定功能,但您只需分配一块内存,打开文件,将文件的数据读入该内存块,然后关闭文件。从那里,您可以以任何您喜欢的方式处理数据。