【问题标题】:How Can I organize data in a binary file?如何在二进制文件中组织数据?
【发布时间】:2017-07-14 16:40:46
【问题描述】:

我正在尝试在二进制文件中组织矩阵,但我不太确定如何去做。我已经成功地将二维数组写入二进制文件并读回该数据,但我担心我只将一行长行写入二进制文件,然后将其读回二维数组。但是,话又说回来,我不完全确定二进制文件是如何工作的,所以我可能错了。 我想将我的二进制文件组织成一个数组图表。这可能吗? 如果我解释得不好,我很抱歉。如果是这样,请发表评论,以便我可以尝试更好地说明我正在尝试做的事情。

谢谢!

【问题讨论】:

  • 你有什么理由使用二维数组而不是普通的平面数组吗?这样统一数据会容易得多。
  • 我正在尝试创建一个程序生成的 10X10 磁贴,其中每个索引都将包含 1 或 0。您是说如果我为一维数组组织二进制文件然后读取会更容易就好像它们是二维数组一样?
  • 文件是字节数组。这样,所有文件都是二进制文件。碰巧所谓的文本文件中的字节可以直接表示为ASCII字符。您应该将它们与 fstream 结合使用。
  • @Bartholomew 我认为将一维数组包装在与二维数组相同的结构中会更容易。换句话说,您可以在内部使用众所周知的 (y * width + x) 公式通过 (x, y) 坐标访问数组元素的结构。这样,将数据写入文件会容易得多。
  • 如果您的数字占用超过一个字节,则需要考虑 Endianess。来自 Little Endian 平台的镜像数据将与 Big Endian 平台不兼容。

标签: c++ arrays binaryfiles


【解决方案1】:

这里有一些关于如何使您的序列化更容易的建议。

  1. 对于矩阵,请使用普通数组。
  2. 将您的数组封装在一个类中,并为其提供一个看起来像矩阵的接口。
  3. 轻松序列化/反序列化普通数组。

要点:

class MyMatrix {
private:
    std::vector<T> myData;
public:
    MyMatrix(int nelems);
    T & operator()(int row, int col);
    T & operator()(int row, int col) const;

};

用法:

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

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

【讨论】:

    猜你喜欢
    • 2019-09-23
    • 2017-05-20
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多