在C++中解析混合二进制数据

Parsing Mixed Binary Data in C++

本文关键字:混合 二进制 数据 C++      更新时间:2023-10-16

我有一团数据正在解析。它具有混合数据类型,一些双精度后跟一些浮点数。这就是我将双精度解析为向量的方式。我只是想要一些关于是否有更好的方法来做到这一点的反馈。我觉得可能有一种方法可以更简洁地做到这一点。

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