获取任何文件的字符串表示,C ++

时间:2014-07-16 11:36:46

标签: c++ fstream

我试图以某种方式获取任何文件的表示(我的意思是.mp3.mp4.jpg.txt,...)这使得我可以使用它,就像它是一个字符串,将该表示保存在一个字符'数组或字符串本身。

我不知道如何提取这些信息......可能是十六进制代码,字节级甚至是位级别。我正在寻找使用fstream类的东西,但不一定。

提前致谢。

1 个答案:

答案 0 :(得分:1)

用于存储二进制数据的字符串是错误的。请考虑使用std::vector<unsigned char>或类似内容。然后你可以写

std::ifstream is("myfile.mp3", std::ifstream::binary);

// Find the length of the file
is.seekg(0, is.end);
std::streampos length = is.tellg();
is.seekg(0, is.beg);

// Create a vector to read it into
std::vector<unsigned char> bytes(length);

// Actually read data
is.read((char *)&bytes[0], length);

// Close the file explicitly, since we're finished with it
is.close();

数据将以bytes结尾。请注意,我们依赖于std::vector的属性,即它分配了一块连续的内存。 (在C ++ 11中,您可能更愿意编写bytes.data()而不是&bytes[0]。)