我想将矩阵的每一行写入二进制文件。 我尝试这样写:
vector< vector<uint32_t> > matrix;
...
for(size_t i = 0; i < matrix.size(); ++i)
ofile->write( reinterpret_cast<char*>(&matrix[i]), sizeof(uint32_t*sizeof(matrix[i])) );
{
for(size_t j = 0; j < numcols; ++j)
{
std::cout << left << setw(10) << matrix[i][j];
}
cout << endl;
}
但它不起作用,我得到垃圾数字。
任何帮助表示赞赏,
泰德。
答案 0 :(得分:5)
一些问题:
&matrix[i]
将为您提供指向vector<uint32_t>
对象的指针。如果您想要指向该向量包含数据的指针,请使用&matrix[i][0]
。
sizeof(matrix[i])
是矢量对象本身的大小,而不是其内容。使用matrix[i].size()
获取元素数量。
使用sizeof(uint32_t * x)
。
sizeof(uint32_t) * x
第二个for
循环实际上并未嵌套在第一个for
循环中。你需要重新安排大括号。
答案 1 :(得分:0)
如果interjay的指导方针还不够:
vector< vector<uint32_t> > matrix;
for(size_t i = 0; i < matrix.size(); ++i)
ofile.write( (char*)&matrix[i][0], sizeof(matrix[i][0])*matrix[i].size() );
偏离上下文的问题:为什么ofile
是指针? (当然不需要在这个例子中)