将int数组序列化/反序列化为char数组

时间:2015-10-17 01:02:05

标签: c++

我试图将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();

一切都按预期工作但有一个问题我真的无法解决问题。让我们说我想反序列化字符串,为了更容易,我想分割字符串并使用分隔符&#34;,&#34; (例如)。

只有转换为char *的int数组最终才会匹配分隔符,因为数组的大小可能不同(10-10000000)

另一种方法是将字符串一直分开,直到我到达array=,但是如果我想稍后添加更多东西,那么代码会变得丑陋甚至更加混乱。

你们有没有提出任何不包含其他文件的建议?

1 个答案:

答案 0 :(得分:0)

我认为解决方案比你想象的要简单。你可以简单地使用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();