从文件中读取文本到无符号字符数组

Posted

技术标签:

【中文标题】从文件中读取文本到无符号字符数组【英文标题】:Reading text from file to unsigned char array 【发布时间】:2011-10-13 10:36:21 【问题描述】:

我希望使用 OpenSSL 加密文件中的文本,并且在加密之前需要将文本放在无符号字符数组中。从文件读取文本到无符号字符数组的最简单方法是什么?

【问题讨论】:

【参考方案1】:

您的问题被标记为 C 和 C++ (不具建设性)。我会给 C++ 一个答案。

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

using namespace std;

int main()

    ifstream in("filename.txt"); //open file
    in >> noskipws;  //we don't want to skip spaces        
    //initialize a vector with a pair of istream_iterators
    vector<unsigned char> v((istream_iterator<unsigned char>(in)), 
                            (istream_iterator<unsigned char>()));
    ...

【讨论】:

@它有什么邪恶之处? :) 我现在正在查找 vector(istream_iterator,istream_iterator) 的文档。就是这么简单 我读到你的答案是这样的:“你的问题被标记为 C 和 C++。(你可能只指 C。)我会给出 C++ 的答案。” ;-) @Amigable:原来他的意思是 C++,因为他编辑了问题 :) 这就是我喜欢 stackoverlow 的原因。每次我都能找到更好的方法来做简单的事情。【参考方案2】:

以您喜欢的任何数据类型阅读它。转换为 (unsigned char*) 保证让您可以访问各个字节。

编辑:这是针对 C 而不是 C++ 的答案。最初这个问题也被标记为 C。

【讨论】:

为什么不能在 C++ 中使用这个答案? @HighLife,也许你可以,但它会被不赞成。您应该明确并使用reinterpret_cast&lt;unsigned char*&gt; 为什么会不受欢迎? @HighLife:在 C++ 中,C 类型转换通常被避免并被专门的类型替换。【参考方案3】:

网上一定有很多关于如何做到这一点的例子。唯一棘手的部分是您几乎肯定需要为数组动态分配内存,以确保您读取的输入不会超过数组的容量。此外,如果您需要处理不适合单个字节数组的 文件(例如,几 GB 或更大),则需要进行更多研究。

【讨论】:

以上是关于从文件中读取文本到无符号字符数组的主要内容,如果未能解决你的问题,请参考以下文章

字符到无符号字符

比较从文本文件中读取的并行数组

字符输入流读取文本文件ReaderFileReaderBufferedReader

字符输入流读取文本文件ReaderFileReaderBufferedReader

如何使用gets()读取无符号字符数组?

从文本文件中读取单词并存储到 C 中的动态数组 Valgrind 错误中