如何从vector <char> </char>复制一个整数

时间:2013-07-21 15:13:54

标签: c++ stdvector

我现在正在使用wav文件,我正在解析它们。我现在不想使用库。 我用fstream打开wav文件并将所有数据读取到vector。 现在我想解析wav文件头。例如,我想获得第4到第8个字节之间的文件大小。我想将它分配给一个整数。我很容易用memcpy完成这个。但是因为它是C ++我不想使用memcpy。 我最终得到的解决方案:

std::vector<unsigned char>::iterator vectorIte = soundFileDataVec.begin();
vawParams.totalfilesize = 0;
//Since it is little endian I used reverse_copy
std::reverse_copy(vectorIte + 4, vectorIte + 7, (unsigned char*)&vawParams.totalfilesize);

我不满意(unsigned char *)强制转换为整数指针。我怀疑有一种比我更好的方法。能告诉我一个更好的方法吗?

2 个答案:

答案 0 :(得分:6)

向量使用连续的存储位置作为元素,可以使用对其元素的常规指针的偏移来访问它们的元素。因此,如果您不想要memcpy,那么一个简单的解决方案就是:

int header = *reinterpret_cast<const int*>(&soundFileDataVec[4]);

这会读取四个字节(您可能需要从一个字节转换为另一个字节)。

答案 1 :(得分:2)

一旦你处于二进制序列化的领域,如果你想要是可移植的并且你不想使用库,你几乎必须在抽象层之下了解如何在编程中向你呈现类型语言。您必须准确理解它是如何存储在文件中的,并且您必须准确理解如何将其恢复出来并将其转换为您正在编译的平台上的编译器所具有的类型的表示。

在这些限制条件下,试图避免演员阵容本身可能是错误的。