Re[5]: memcpy
От: Stanislav V. Zudin Россия  
Дата: 15.04.15 15:17
Оценка:
Здравствуйте, SmileIlya, Вы писали:

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


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

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

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

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

Т.е. либо
fun(&vDouble[0], sizeof(double) * vDouble.size());

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

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

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

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

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