我需要一些帮助,使用 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
}
有人可以告诉我我做错了什么吗?我没有编译错误,文件没有被写入(我已经从之前创建了它)。
答案 0 :(得分:2)
2件事,你在寻找文件的正确位置吗?它应该在工作目录的任何地方。您不需要事先创建文件,它将被创建。其次,确保它正在创建文件,您可以通过以下方式执行此操作:
if (!fstreamFile) { cout << "errorr.." << endl; }
答案 1 :(得分:1)
你倾向于使用iostream来避免施放。
给定一个无符号字符数组,您只需使用算法和迭代器来编写文件。
#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)
);
答案 2 :(得分:1)
(char*) array[0]+(i*noOfCols)
这是将数组的值取在位置0,然后将该值转换为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];
然后通常对两个维度进行操作会更直截了当。你的方法没有让你获得任何表现。