C++ 如何在二进制文件中组织数据?

C++ 如何在二进制文件中组织数据?,c++,arrays,binaryfiles,C++,Arrays,Binaryfiles,我试图在一个二进制文件中组织矩阵,但我不太确定如何去做。我已经成功地将2d数组写入二进制文件,并将数据读回,但我担心我只在二进制文件中写入一行,然后将其读回2d数组。但是,再一次,我不能完全确定二进制文件是如何工作的,所以我可能是错的。 我想把我的二进制文件组织成一个数组图表。这可能吗? 如果我解释得不好,我道歉。如果是这样,请留下评论,以便我能更好地说明我正在尝试做什么 谢谢大家! 这里有一些关于如何简化序列化的建议 对于矩阵,使用普通数组 将数组封装在一个类中,并给它一个看起来像矩阵的接口

我试图在一个二进制文件中组织矩阵,但我不太确定如何去做。我已经成功地将2d数组写入二进制文件,并将数据读回,但我担心我只在二进制文件中写入一行,然后将其读回2d数组。但是,再一次,我不能完全确定二进制文件是如何工作的,所以我可能是错的。 我想把我的二进制文件组织成一个数组图表。这可能吗? 如果我解释得不好,我道歉。如果是这样,请留下评论,以便我能更好地说明我正在尝试做什么


谢谢大家!

这里有一些关于如何简化序列化的建议

  • 对于矩阵,使用普通数组
  • 将数组封装在一个类中,并给它一个看起来像矩阵的接口
  • 轻松地序列化/反序列化普通数组
  • 要点:

    类MyMatrix{
    私人:
    std::向量myData;
    公众:
    MyMatrix(int-nelems);
    运算符()(整数行,整数列)(&T);
    运算符()(int行,int列)常量(&O);
    
    })

    用法:

    MyMatrix<int> m(200);
    m(row, col) = 27;
    ...
    serialize(m);
    
    MyMatrix m(200);
    m(行,列)=27;
    ...
    序列化(m);
    

    序列化将只序列化std::vector(实际上是指向T类型的n个元素的指针)。如果需要,您也可以使用普通的
    T*
    plus
    new
    ,并且矩阵无法调整大小。

    您使用二维数组而不是普通的平面数组有什么原因吗?这样统一数据会容易得多。我正在尝试创建一个按程序生成的10X10图块,其中每个索引将包含1或0。你是说如果我组织一维数组的二进制文件,然后像读取二维数组一样读取它们会更容易些?文件是字节数组。这样,所有文件都是二进制文件。碰巧,所谓文本文件中的字节可以直接表示为ASCII字符。您应该将它们与fstream结合使用。@Bartholomew我认为将1D数组封装在与2D数组行为相同的结构中会更容易。换句话说,一种结构,在这种结构中,您可以通过(x,y)坐标在内部使用众所周知的(y*width+x)公式访问数组元素。这样,将数据写入文件要容易得多。如果您的数字占据一个字节以上,则需要考虑字节数。来自小端平台的镜像数据将与大端平台不兼容。
    MyMatrix<int> m(200);
    m(row, col) = 27;
    ...
    serialize(m);