C++ C++;通过串行向使用serial.parseInt()的arduino发送int;

C++ C++;通过串行向使用serial.parseInt()的arduino发送int;,c++,serial-port,arduino,C++,Serial Port,Arduino,首先,问题是: 我无法找到一个通过串口发送2字节数据到一个ARDUINO(使用Sale.PARSETINE())的方法,它是从Windows C++控制台应用程序中获得的。 代码如下:(为了清晰起见,对其进行了精简,但在检查所有串行设置函数调用是否成功的更大版本中,问题仍然存在,以此类推) 如上所述,我使用arduino串行监视器对此没有问题 我尝试过翻转endianess,但不确定是否正确操作-2字节版本是: dataToSend = (dataToSend << 8) | ((

首先,问题是:

我无法找到一个通过串口发送2字节数据到一个ARDUINO(使用Sale.PARSETINE())的方法,它是从Windows C++控制台应用程序中获得的。 代码如下:(为了清晰起见,对其进行了精简,但在检查所有串行设置函数调用是否成功的更大版本中,问题仍然存在,以此类推)

如上所述,我使用arduino串行监视器对此没有问题

我尝试过翻转endianess,但不确定是否正确操作-2字节版本是:

dataToSend = (dataToSend  << 8) | ((dataToSend >> 8) & 0x00ff);
dataToSend=(dataToSend>8)&0x00ff);
与序列、行尾、变量类型有关吗


任何提示都值得欣赏:)

用另一种方法解决了这个问题,这很好,而且至少在我看来同样有效-但我想问题仍然存在,为什么这不起作用?Serial.parseInt()用于扫描ASCII字符的文本字符串。如果发送2字节的二进制数据,则该数据不是文本字符串。接收器应期望另一端有2字节的数据(假设传输介质和消息同步完美,这可能是错误的假设)。如果您希望接收器使用Serial.parseInt(),那么您必须转换二进制值并发送一个ASCII数字字符串。这就是我最终解决问题的方法。我被parseint的“int”部分抛出,需要阅读更多关于它的内容。他也不知道如何通过串行数据区分不同的数据。0和1是0和1对的??)“我被parseint的'int'部分抛出了”——“parse”是真正的关键字。您通常不会解析整数值,但您肯定会解析(实际上是词汇扫描)字符串。“也不知道如何区分不同的数据……”——不,软件不应该试图“区分”不同的数据类型,而是应该始终如一地处理它。这就是为什么有消息协议来封装二进制数据。您当前发送2个裸字节二进制数据的方案在实际情况中容易出现几个陷阱。
  if (Serial.available()) {servoData = Serial.parseInt();}
dataToSend = (dataToSend  << 8) | ((dataToSend >> 8) & 0x00ff);