Проблема с вектором uint8_t в вектор двойногоC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема с вектором uint8_t в вектор двойного

Сообщение Anonymous »

Я использую API, который возвращает глубину буфера в байтах для пикселей. Возвращенными данными являются Vector . Чтобы распаковать его в вектор с плавающей точкой, я сделал это: < /p>

Код: Выделить всё

auto [depthBytes, resolution] = sim.getVisionSensorDepth(CameraHandle,1);
int width = static_cast(resolution[0]);
int hight = static_cast(resolution[1]);

vector depth_in_float(width*hight);
memcpy(depth_in_float.data(),depthBytes.data(),width*hight*sizeof(float));

for (int i(0); i < depth_in_float.size(); ++i)
cout 
[code]Return values
depth: the depth buffer. Use sim.unpackFloatTable to obtain an array of values
< /code>
Функция unpackfloattable < /code> ожидает < /p>

Данные: строка (значения между 0 и 255), который содержит упакованные
номера с плавающей точкой < /p>
< /blockquote>
, к сожалению, документация их api для CSt-let-le Date. Тем не менее, я могу посмотреть на источник их функции, который имеет эту реализацию. < /P>
std::tuple sim::getVisionSensorDepth(int64_t sensorHandle, std::optional options, std::optional pos, std::optional size)
{
bool _brk = false;
json _args(json_array_arg);
_args.push_back(sensorHandle);
if(options)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*options);
}
else _brk = true;
if(pos)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*pos);
}
else _brk = true;
if(size)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*size);
}
else _brk = true;
auto _ret = this->_client->call("sim.getVisionSensorDepth", _args);
return std::make_tuple(_ret[0].as(), _ret[1].as());
}
< /code>
К счастью, я обнаружил, что у них есть функция, которая распаковывает строку в номера с плавающей точкой, которая имеет эту реализацию < /p>
std::vector sim::unpackFloatTable(std::vector data, std::optional startFloatIndex, std::optional floatCount, std::optional additionalByteOffset)
{
bool _brk = false;
json _args(json_array_arg);
_args.push_back(bin(data));
if(startFloatIndex)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*startFloatIndex);
}
else _brk = true;
if(floatCount)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*floatCount);
}
else _brk = true;
if(additionalByteOffset)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*additionalByteOffset);
}
else _brk = true;
auto _ret = this->_client->call("sim.unpackFloatTable", _args);
return _ret[0].as();
}
Хотя функция с именем unpackfloattable , возвращает Vector . Эта функция выполняет задание.

Подробнее здесь: https://stackoverflow.com/questions/797 ... -of-double
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»