2015-10-17 3 views
1

Я пытаюсь преобразовать 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(); 

Все работает, как ожидалось, но есть одна проблема, я на самом деле не может обернуть голову. Предположим, я хочу десериализовать строку и ради этого упростить, я хотел бы разделить строку и использовать разделитель «,» (например).

Это будет работать только до целочисленного массива, который преобразуется в символ * будет в конечном счете соответствовать разделителю, а так как размер массива может отличаться (10-10000000)

Другого способом заключается в разделении строки до тех пор, пока я не доберусь до array=, но опять же, код становится уродливым и даже более грязным, если я хочу добавить еще больше материала позже.

У вас, ребята, есть предложения, которые не включают другие библиотеки?

+0

Чего вы хотите достичь? Я не понимаю, почему вы хотите добавить разделитель, так как вы не можете доверять им в любом случае. Есть такие числа, как 44, которые также будут создавать ',' .in ваш поток. – JojOatXGME

+0

Другое, что может вас заинтересовать. Есть что-то, называемое * byte order *. Процессор с архитектурой x86 использует * 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(); 
Смежные вопросы