Здравствуйте, 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>
может я чего-то не понимаю, но как вернуть вектор после всех преобразований?