C ++在编译时数据格式和类型未知时将数据读入内存

时间:2016-09-07 22:54:45

标签: c++ file-io

问题

如果来自文件流的数据格式未知,如何将数据读入类中的向量?

(注意:......如评论中所述......如果文件格式类型为float,则该文件仅包含float数据。它不能混合使用floatdouble。 - 在理解了以下问题后,这将有意义...)

我正在编写一个C ++类来从指定格式的文件中读取数据。出于这个问题的目的,让我们简化文件格式。它描述如下。

  • 文件的前4个字节组成int,用作指定文件数据格式的标志。

    • 如果int为0,则文件数据的类型为float
    • 如果int为1,则文件数据的类型为double
  • 文件的后4个字节构成int。这指定了要读入数组的元素数量或std::vector

但我们不知道是否需要提前std::vector<float>std::vector<double>

我试图为自己解决这个问题,但是我删除了这个尝试,因为这个问题吸引了大量的downvotes,并且正如在meta中所讨论的那样,可能的原因是尝试解决问题不完整。 (但是你可以在下面的答案中看到我完成的尝试 - 它有一些问题,如评论中讨论的尚未修复。)

1 个答案:

答案 0 :(得分:0)

这可能不是解决此问题的最简单方法,但我认为它会起作用。我觉得我需要有更多的信息和代码才能真正解决这个问题,所以这就是我能用所提供的信息做的全部:

我会将整数(表示文件中的数据类型)读入bool。然后我会将它作为参数传递给某些函数,如vectorDataType或其他东西。在该函数中,使用if-else语句和typedefif-else语句:

if (dataType == 0) {
    typedef float fileData;
}
else {
    typedef double fileData;
}

现在,您不需要使用类型名称,只需使用您定义为floatdouble的名称。

std::vector<fileData>;

不知道数据类型可能会在程序中产生更多问题。但是,假设您不需要知道制作向量之外的数据类型,这应该是解决当前问题的好方法。