如何将 boost::asio::streambuf 转换为浮点数
How can I convert boost::asio::streambuf to float?
我正在从串行端口读取数据。我已经设法获得了端口设置,并且可以读取缓冲区,但是我不知道如何将缓冲区保存的数据转换为浮点数。
float Serial::ReadData()
{
boost::asio::streambuf buff;
int bytesRead = read_until(*port, buff, "n");
boost::asio::const_buffers_1 constBuff = buff.data();
char*data = nullptr;
int pos = 0;
for (auto buffer = constBuff.begin(); buffer != constBuff.end(); buffer++)
{
data[pos] = reinterpret_cast<char>(buffer);
pos++;
}
buff.consume(bytesRead);
return atof(data);
}
或者
住在科里鲁
目前,它可能看起来几乎等效,但是:
- 它不会泄漏内存
- 它不会不必要地复制缓冲区
- 它处理错误
- 如果您想解析超过 1 件事,它会更加灵活
#include <boost/asio.hpp>
#include <iostream>
#include <stdexcept>
struct Serial {
float ReadData();
boost::asio::serial_port* port = nullptr;
};
float Serial::ReadData()
{
boost::asio::streambuf buff;
/*int bytesRead = */read_until(*port, buff, "n");
std::istream is(&buff);
float f;
if (is >> f)
return f;
throw std::invalid_argument("ReadData");
}
int main(){}
好吧,我想出了该怎么做。这比我最初想象的要简单得多。
float Serial::ReadData()
{
boost::asio::streambuf buff;
int bytesRead = read_until(*port, buff, "n");
char*data = new char[bytesRead];
buff.sgetn(data, bytesRead);
return atof(data);
}
相关文章:
- 将浮点数转换为无符号字符数组并打印出来
- 如何将时间字符串 (M:SS) 转换为浮点数
- 如何将浮点数(*)[6]转换为浮点**类型?
- 如何将浮点数转换为uint8_t?
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- C++ - 转换标准::浮点数组的字符串
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- Zedboard zynq-7000 Opencl 浮点数从类型 'double*' 强制转换为类型 'double' 无效
- 将浮点数转换为字符串时如何加快此代码的速度?
- 我可以安全地将浮点数的结构转换为浮点数组吗C++?
- 如何将带有浮点数的字符串转换为十进制?
- 浮点到整数转换出错(即使浮点数已经是整数)
- C/C++ - 将浮点数转换为字节数组,以便字节保持排序
- 将整数的二进制数据转换为浮点数
- 使用 avr-gcc 隐式转换为浮点数:uint8_t vs. uint16_t
- 将浮点数向量转换为十六进制/二进制字符串
- 精确且无公差地将浮点数转换为字符串