将文件存储在unsigned char数组中并打印它

时间:2016-10-09 10:32:22

标签: c++ arrays

我已经使用下面的代码来读取二进制文件(在我的情况下是.docx文件)并将其存储在unsigned char数组中而不仅仅是char(从这里获取引用Reading and writing binary file

#include <fstream>
#include <iterator>
#include <vector>

int main()
{
    std::ifstream input("C:\\test.docx", std::ios::binary);
    std::vector<unsigned char> buffer((std::istreambuf_iterator<unsigned char>(input)), 
                                      (std::istreambuf_iterator<unsigned char>()));
}

现在我有两个问题。

我想知道的第一件事是,这是在unsigned char数组中读取.docx文件的正确方法吗?或者有更好的选择吗?

其次,我需要打印在unsigned char数组中读取的文件内容,以验证它是否正确读取了该文件。怎么能实现呢?

1 个答案:

答案 0 :(得分:1)

如果您将整个文件放在内存中,这是一种好方法。如果要分批读取文件,则应迭代它。一个用例就是通过网络传输它 - 在那里,你不会需要整个文件在内存中。

关于打印文件,可以打印读取的字节,例如:

#include <fstream>
#include <iterator>
#include <vector>
#include <iostream>
#include <iomanip>

int main()
{
    std::ifstream input("C:\\test.docx", std::ios::binary);
    std::vector<unsigned char> buffer((std::istreambuf_iterator<unsigned char>(input)), 
                                      (std::istreambuf_iterator<unsigned char>()));

    std::cout << std::hex;
    for (unsigned char b : buffer)
        std::cout << "0x" << std::setfill('0') << std::setw(2) << (int)b << " "; 
    std::cout << std::dec << std::endl;
}

如果您打算打印文件内容以查看一些熟悉的文字,那么这不会直接起作用。 docx文件使用Open XML File Format,首先,它们使它们成为一个zip文件。在zip文件中,您将找到文档中数据的XML表示,这些表示是可读的。