繁体   English   中英

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

[英]Store file in unsigned char array and print it

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

#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数组中读取的文件内容,以验证它是否正确读取了该文件。 怎么能实现呢?

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

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

#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文件格式 ,首先,它使它们成为一个zip文件。 在zip文件中,您将找到文档中数据的XML表示,这些表示是可读的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM