在 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;
}

您不需要额外分配,因为无论如何 vector 都会复制内容。 要将数据从指针转换为 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 };
}

另请注意,由于 C++ 中的指针运算,最终我们没有任何 sizeof(double)

P.S。与您的代码(没有异常安全性)不同,此代码具有很强的异常安全性。 而对于尺码类型最好使用dedicated size_t.