序列化/反序列化整型数组为char数组

Serialize/deserialize int array to char array

本文关键字:数组 char 整型 反序列化 序列化      更新时间:2023-10-16

我正在尝试将int数组转换为char数组并将其写入像这样的流:

size_t arraySize = 10;
int* intArray = new int[arraySize];
std::ostringstream buffer;
buffer << "foo1=test,arraySize=10,array=";
char* charArrayPtr = reinterpret_cast<char*>(intArray);
buffer.write(charArrayPtr,arraySize*sizeof(int));
auto str = buffer.str();

一切都如我所愿,但有一个问题我实在想不明白。假设我想要对字符串进行反序列化,为了使操作更简单,我想要拆分字符串并使用分隔符","(例如)。

由于数组的大小可以不同(10-10000000),所以只有在转换为char*的int数组最终也匹配分隔符时才会起作用

另一种方法是一直拆分字符串,直到我得到array=,但是如果我想在以后添加更多的东西,代码会变得丑陋甚至更混乱。

你们有什么不包括其他库的建议吗?

我认为解决办法比你想象的要简单。您可以简单地使用for循环:

size_t arraySize = 10;
int* intArray = new int[arraySize];
std::ostringstream buffer;
buffer << "foo1=test,arraySize=10,array=";
char* charArrayPtr = reinterpret_cast<char*>(intArray);
for( unsigned int i = 0; i < arraySize; i++ ){
    buffer.write(&charArrayPtr[i*sizeof(int)], sizeof(int));
    // Write separator here
    if( i != arraySize - 1 )  // Don't separate after the last one
        buffer.write(", ", 2);
}
auto str = buffer.str();