2015-10-17 100 views
1

我想转换一个int数组以字符数组,并将其写入这样的流:序列化/反序列化int数组以字符数组

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(); 

一切正常,但有一个问题,我真的无法缠住我的头。比方说,我想反序列化字符串,为了方便起见,我想分割字符串并使用分隔符“,”(例如)。

这只会工作,直到int数组被转换为char *最终会匹配定界符,以及因为该阵列的尺寸可以不同(10-10000000)

的另一种方式是将分割字符串一直到array=,但如果我想稍后添加更多内容,代码会变得更加难看,甚至更加混乱。

你们是否碰巧有任何不包含其他库的建议?

+0

你想实现什么?我不明白你为什么要添加一个分隔符,因为你无法信任它们。有像44这样的数字也会在你的数据流中创建一个''''。 – JojOatXGME

+0

另一个想法可能会让你感兴趣。有一种叫做*字节顺序*的东西。一个x86架构的CPU使用* little endian *,其他架构可能会使用另一个架构。如果你想与其他系统进行通信,最好将整数转换为* big endian *(在许多协议中也称为*网络字节顺序*)。 – JojOatXGME

回答

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();