0

我需要一些帮助来使用fstream写入文件。我目前可以使用 fwrite 方法编写。但我想使用 fwrite 转换数据类型并使用它写入

以下是我到目前为止的内容:

noOfRows = 700;
noOfCols = 100
array[0] = unsigned char [noOfRows * noOfCols]

fstream fstreamFile;
fstreamFile.open ("fstreamFile.txt", fstream::out);

for(int i = 0; i < noOfRows; i++ )
{
fwrite(array[0]+(i*noOfRows), sizeOf(unsigned char), noOfCols, fwriteFile); // writes ok
fstreamFile.write((char*) array[0]+(i*noOfCols), sizeof(unsigned char)); // doesn't write
}

有人可以告诉我我做错了什么吗?我没有收到编译错误,文件只是没有被写入(我已经从手头创建了它)。

4

3 回答 3

2

2件事,你在寻找文件的正确位置吗?它应该在工作目录所在的任何位置。您不需要事先创建文件,它将被创建。其次,确保它正在创建文件,你可以这样做:

if (!fstreamFile) { cout << "errorr.." << endl; }
于 2012-06-22T20:07:12.383 回答
1

(char*) array[0]+(i*noOfCols)

这是在位置 0 处获取数组的值,然后将该值转换为 a char *(给出一些随机乱码指针),然后添加i * noOfCols到该值。我相信这可能是你想要的:

(char*) (&array[0]+(i*noOfCols))

但是,从风格上讲,我建议改用 C++ 强制转换。

reinterpret_cast<char *>(& array[0] + i * noOfCols)

我还建议不要sizeof(unsigned char)使用sizeof(array[0]),只是为了更通用一点。

此外,您似乎正在尝试使用一维数组来模拟二维数组。unsigned char array [noOfRows][noOfCols];将数组声明为然后正常对两个维度进行操作会更直接。你的方法没有让你有任何表现。

于 2012-06-23T00:42:22.363 回答
1

您倾向于使用 iostreams 来避免强制转换。

给定一个无符号字符数组,您可以改为使用算法和迭代器来写入文件。

#include <fstream>
#include <algorithm>
#include <iterator>

// your main and array declaration here

ofstream fstreamFile("fstreamFile.txt");
copy(
    array,
    array + sizeof(array),
    ostream_iterator<unsigned char>(fstreamFile)
);
于 2012-06-22T21:34:28.830 回答