Есть вопрос, который очень похож по духу здесь . К сожалению, этот вопрос не вызвал большого ответа - я подумал, что задам более конкретный вопрос в надежде, что можно будет предложить альтернативный метод.
Я записываю двоичный файл в std::cin
(с tar --to-command=./myprog
).
Бинарный файл представляет собой набор чисел с плавающей точкой, и я хочу поместить данные в std::vector<float>
- в идеале - в способ C ++.
Я могу очень хорошо сгенерировать std::vector<char>
(благодаря этот ответ )
#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
int
main (int ac, char **av)
{
std::istream& input = std::cin;
std::vector<char> buffer;
std::copy(
std::istreambuf_iterator<char>(input),
std::istreambuf_iterator<char>( ),
std::back_inserter(buffer)); // copies all data into buffer
}
Теперь я хочу преобразовать свой std::vector<char>
в std::vector<float>
, предположительно с std::transform
и функцией, которая выполняет преобразование (скажем, char[2]
в float
). Однако я борюсь, потому что в моем std::vector<float>
будет вдвое меньше элементов, чем в std::vector<char>
. Если бы я мог повторить шаг с шагом 2, то я думаю, что я был бы в порядке, но из предыдущего вопроса кажется, что я не могу этого сделать (по крайней мере, не элегантно).