Re[6]: memcpy
От: SmileIlya  
Дата: 15.04.15 16:42
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Здравствуйте, SmileIlya, Вы писали:


SVZ>>>Только получается аццкая смесь из С и С++. Уверен, что твою задачу по-другому не решить?


SI>>Других вариантов нет. Это ф-ция одна из в чудо ядре. Писали давно и универсально

SI>>После всех этих развлечений, надо снова получить vector<double>

SVZ>А на принимающей стороне известно, что принятая пачка байтов это vector<double>? Размер массива известен или надо передать вместе с "полезной нагрузкой" или можно вычислить из размера блока памяти?


SVZ>Что-то мне подсказывает, что стоит посмотреть, как работает сериализация.

SVZ>И решить, достаточно ли передавать просто массив даблов или еще записывать количество элементов.

SVZ>Т.е. либо

SVZ>
SVZ>fun(&vDouble[0], sizeof(double) * vDouble.size());
SVZ>

SVZ>Либо (псевдокод):

SVZ>
SVZ>ByteOStream bs;                                         // Сериализовать массив
SVZ>bs << vDouble.size();                                   // Записать размер массива
SVZ>bs.write(&vDouble[0], sizeof(double) * vDouble.size()); // Записать данные

SVZ>const void* pValue = bs.getBytes();                     // Блок байт
SVZ>size_t sz = bs.size();                                  // размер блока в байтах

SVZ>fun(pValue, sz);                                        // суперъядерное копирование

SVZ>...
SVZ>// И на принимающей стороне:
SVZ>const void* pValue = ...                                // Принять блок памяти
SVZ>size_t sz = ...
SVZ>ByteIStream bs(pValue, sz);                             // Десериализовать
SVZ>size_t num = 0;
SVZ>bs >> num;
SVZ>std::vector<double> another_vDouble(num);               // Выделить память
SVZ>bs.read(&another_vDouble[0], num);                      // Загрузить полезные данные
SVZ>


может я чего-то не понимаю, но как вернуть вектор после всех преобразований?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.