Я отправляю поток байтов фиксированной длины через последовательный порт на другой компьютер, и я хотел бы попытаться преобразовать поток байтов в вектор чисел с плавающей запятой.
Мой поток имеет разделитель stop
, и я использую эту последовательную библиотеку.
Моя текущая реализация включает в себя следующее:
Я прочиталстрока
std::string data_string;
ser.readline(data_string, 2052, "stop");
Проверить, заканчивается ли строка разделителем
if(boost::algorithm::ends_with(stop_string, "stop"))
{
if(data_string.length() == 2052)
Затем преобразовать строку в вектор
std::vector<unsigned char>bytes(stop_string.begin(), stop_string.end());
Затем я использую цикл forи memcpy
для преобразования bytes
в массив чисел с плавающей запятой.
unsigned char temp_buffer[4];
float float_values[513] = { 0 };
int j = 0;
for(size_t i = 4; i < 2052; i+=4)
{
temp_buffer[0] = bytes[i - 4];
temp_buffer[1] = bytes[i - 3];
temp_buffer[2] = bytes[i - 2];
temp_buffer[3] = bytes[i - 1];
memcpy(&float_values[j], temp_buffer, sizeof(float));
j++;
}
Но этот метод выглядит громоздким, и я бы хотел избежать цикла for.Есть ли способ: