这是我第一次使用boost,我确信我缺少一些简单的东西。 我正在尝试通过串行端口发送 3 字节的数据。 有问题的三个字节是:
天=2; 月=1; 年=13;
使用以下代码,仅发送第一个字节。
io_service Link;
serial_port serial(Link);
serial.open("/dev/ttyUSB0");
if(serial.is_open())
{
qDebug() <<"open";
serial.set_option(serial_port_base::baud_rate(9600));
//send data
boost::array<int,3> array ={{day,month,year}};
qDebug()<<serial.write_some(boost::asio::buffer(array,3));
serial.close();
}
我发送到的设备向我报告(以十六进制)它收到的值。 它获取值 0x02,0x00,0x00。 现在调整代码,以便我可以将所有三个字节发送到我的设备:
io_service Link;
serial_port serial(Link);
serial.open("/dev/ttyUSB0");
if(serial.is_open())
{
qDebug() <<"open";
serial.set_option(serial_port_base::baud_rate(9600));
//send data
boost::array<int,1> array ={{day}};
qDebug()<<serial.write_some(boost::asio::buffer(array,1));
array={{month}};
qDebug()<<serial.write_some(boost::asio::buffer(array,1));
array={{year}};
qDebug()<<serial.write_some(boost::asio::buffer(array,1));
serial.close();
}
设备读取:0x02,0x01,0x0D。 这感觉非常错误,我想正确使用这些库。 我怀疑我没有正确使用 boost 的缓冲区和数组类,但我真的不知道。 有什么想法吗?
您从未创建过包含要发送的三个字节的数据结构。您只创建了一个包含要发送的三个值的数据结构。您从未将这些值从计算机存储它们的格式转换为应该发送它们的线路格式。因此,如果你的代码确实有效,那完全是偶然的。
当然,您的计算机不会将整数存储为单个字节。如果是这样,你怎么能代表300?所以这是行不通的。
boost::array<int,3> array ={{day,month,year}};
qDebug()<<serial.write_some(boost::asio::buffer(array,3));
第一行创建一个包含要发送的三个值的数据结构。第二行按原样发送这些值,而不会将它们转换为应该通过网络发送的确切字节流。
如果您希望在串行端口上发送特定的字节流,则代码必须在某个地方编写该确切的字节流并发送它。