在 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,但有大量实现这个的库,例如,最常用的库之一,如果它带有很多依赖项,那就是:
其他广泛使用但需要预编译步骤的库是:
我想要 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,但有大量实现这个的库,例如,最常用的库之一,如果它带有很多依赖项,那就是:
其他广泛使用但需要预编译步骤的库是: