复制到矩阵的二进制文件行

时间:2011-01-11 23:18:37

标签: c++

我想将矩阵的每一行写入二进制文件。 我尝试这样写:

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;
}

但它不起作用,我得到垃圾数字。

任何帮助表示赞赏,

泰德。

2 个答案:

答案 0 :(得分:5)

一些问题:

  1. &matrix[i]将为您提供指向vector<uint32_t>对象的指针。如果您想要指向该向量包含数据的指针,请使用&matrix[i][0]

  2. sizeof(matrix[i])是矢量对象本身的大小,而不是其内容。使用matrix[i].size()获取元素数量。

  3. 使用sizeof(uint32_t * x)

  4. ,而不是sizeof(uint32_t) * x
  5. 第二个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是指针? (当然不需要在这个例子中)