在 C++ 中 Encode/Decode To/From 二进制对象的标准方法

The Standard Way To Encode/Decode To/From Binary Object In C++

我想要 encode/decode 一些基本类型 into/from 二进制。

测试代码可能是这样的。

 int main()
{
    int iter = 0;
    char* binary = new char[100];

    int32_t version = 1;
    memcpy(binary, &version, sizeof(int32_t));
    iter+=sizeof(int32_t);

    const char* value1 = "myvalue";
    memcpy(binary+iter, value1, strlen(value1));
    iter+=strlen(value1);

    double value2 = 0.1;
    memcpy(binary+iter, &value2, sizeof(double));
#warning TODO - big/small endian - fixed type length

    return 0;
}

但是我还需要解决很多问题,比如字节序和固定类型长度

所以我想知道是否有标准的方法来实现这个。

同时,我不想使用任何第三方实现,比如Boost等。因为我需要保持我的代码简单和独立。

如果Objc中有NSCoding之类的function/class,那就最好了。我想知道C++标准库中是否有同样的东西。

不,标准库中没有序列化函数。使用库或自己实现。

请注意,raw new 和 delete 在 C++ 中是一种不好的做法。

每个 OS 基础库中最标准的东西是 ntohs/ntohl 和 htons/htonl,您可以使用它们从 'host' 到 'network'字节顺序被认为是序列化整数的标准。

问题是目前还没有针对 64 位类型的标准 API,无论如何你都应该自己序列化字符串(最常见的方法是在字符串数据前添加一个 int16/32,其中包含以字节为单位的字符串长度)。

同样 C/C++ 不提供序列化数据的标准方法 from/to 二进制缓冲区或 XML 或 JSON,但有大量实现这个的库,例如,最常用的库之一,如果它带有很多依赖项,那就是:

Boost serialize

其他广泛使用但需要预编译步骤的库是:

Google procol buffers

FlatBuffers