当编译时数据格式和类型未知时,C++将数据读入内存
C++ Reading Data into Memory when Data Format and Type is Unknown at Compile Time
问题
如果文件流中的数据格式未知,如何将数据读取到类内的向量中?
(注意:…如注释中所述…如果文件格式类型为float
,则该文件仅包含float
数据。它不能是float
和double
的混合。-理解以下问题后,这将有意义…(
我正在编写一个C++类,以从指定格式的文件中读取数据。为了解决这个问题,让我们简化文件格式。如下所述。
-
文件的前4个字节形成
int
,这用作指定文件数据格式的标志。- 如果
int
为0,则文件数据的类型为float
- 如果
int
为1,则文件数据的类型为double
- 如果
-
文件中接下来的4个字节形成一个
int
。这指定了要读取到数组或std::vector
中的元素数。
然而,我们不知道std::vector<float>
还是std::vector<double>
是预先需要的。
我曾尝试过为自己解决这个问题,但我取消了尝试,因为这个问题吸引了大量的反对票,正如元中所讨论的,造成这种情况的一个可能原因是解决问题的尝试没有完成。(然而,你可以在下面的答案中看到我完成的尝试-正如评论中所讨论的,它有一些问题尚未解决。(
这可能不是解决这个问题的最简单方法,但我认为它会起作用。我有点觉得我需要更多的信息和代码才能真正解决这个问题,所以这就是我所能做的所有信息:
我会将整数(表示文件中的数据类型(读取到bool
中。然后我会把它作为一个参数传递给vectorDataType
之类的函数。在该函数中,使用if-else
语句和typedef
。if-else
语句:
if (dataType == 0) {
typedef float fileData;
}
else {
typedef double fileData;
}
现在,您不需要使用类型名称,只需要将名称定义为float
或double
即可。
std::vector<fileData>;
不知道数据类型可能会在程序中产生更多问题。但是,假设您不需要知道矢量之外的数据类型,这应该是解决当前问题的好方法。
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在 malloc 内存中初始化非 POD 数据
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 基于浅树的数据结构的内存分配器,用于频繁分配和解除分配
- 获取 R 数据帧的内存地址
- 将数据存储在内存中以供以后访问
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 数据在内存 c++ 中丢失
- 我可以使用哪种数据结构来释放连续内存中的内存?
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 为什么 std::set 容器使用的内存比其数据大小多得多?
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 内存映射C++中的流数据
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- C++应用程序中的静态数据内存限制
- 基于两个程序之间的事件触发器访问数据(内存)
- C++并集表示数据内存与C标量变量类型