2015-10-17 102 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();