在C++中解析混合二进制数据
Parsing Mixed Binary Data in C++
我有一团数据正在解析。它具有混合数据类型,一些双精度后跟一些浮点数。这就是我将双精度解析为向量的方式。我只是想要一些关于是否有更好的方法来做到这一点的反馈。我觉得可能有一种方法可以更简洁地做到这一点。
BlobData::MyDoubles is a vector<double>;
BlobData::MyDoubles MyClass::GetDataPointsFromBlob(const text* blob, const int numDoubles)
{
BlobData::MyDoubles::value_type* doubles = new BlobData::MyDoubles::value_type[numDoubles];
memcpy(doubles, blob, numDoubles*sizeof(BlobData::MyDoubles::value_type));
BlobData::MyDoubles returnVal = BlobData::MyDoubles(doubles,doubles+numDoubles);
delete [] doubles;
return returnVal;
}
您不需要额外的分配,因为无论如何矢量都会复制内容。要将数据从指针转换为 void/char/whatever_blob请使用reinterpret_cast
这正是它的用途。你可以用一对迭代器构造向量(指针是迭代器(。
vector<double> GetDataPoints(const char* blob, const int numDoubles) {
const double* dbegin = reinterpret_cast<const double*>(blob);
return { dbegin, dbegin + numDoubles };
}
另请注意,由于指针算术,最终我们没有任何sizeof(double)
C++
附言与你的代码(没有异常安全(不同,这个代码有很强的异常安全性。而对于尺寸类型最好使用专用size_t
。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 有根的二进制搜索树.保留与其父级的链接
- 多态二进制函数
- 正在读取二进制文件(is_open)
- visual在c++中将十进制数转换为二进制数
- C++十进制到二进制,如何转换
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 混合组合和继承的C++问题
- 在混合代码库中将C转换为C++时出现许多包含错误
- 为什么二进制搜索在我的测试中不起作用
- 重载==不适用于二进制树
- 正在尝试重载二进制搜索树分配运算符
- C++ 中混合二进制/文本日志记录的最佳做法
- 为什么C++标准指定有符号整数在具有混合符号的二进制操作中强制转换为无符号整数
- 在C++中解析混合二进制数据
- 混合使用不同编译器版本构建的二进制文件
- 如何在C++中读取混合文本和二进制的大文件
- RCDATA:混合字符串和二进制数据