C++ 在c+中读取COM端口+;,出错

C++ 在c+中读取COM端口+;,出错,c++,serial-port,C++,Serial Port,第一次海报长期读者 我一直在玩从蓝牙GPS装置读取数据的游戏。 我可以使用超级终端连接到它并查看数据 以下日志来自超级项 $GPRMC,195307.109,A,5208.2241,N,00027.7689,W,000.0,345.8,310712,,,A*7E $GPVTG,345.8,T,,M,000.0,N,000.0,K,A*07 $GPGGA,195308.109,5208.2242,N,00027.7688,W,1,04,2.1,58.9,M,47.3,M,,0000*7E $GPG

第一次海报长期读者

我一直在玩从蓝牙GPS装置读取数据的游戏。 我可以使用超级终端连接到它并查看数据

以下日志来自超级项

$GPRMC,195307.109,A,5208.2241,N,00027.7689,W,000.0,345.8,310712,,,A*7E
$GPVTG,345.8,T,,M,000.0,N,000.0,K,A*07
$GPGGA,195308.109,5208.2242,N,00027.7688,W,1,04,2.1,58.9,M,47.3,M,,0000*7E
$GPGSA,A,3,19,03,11,22,,,,,,,,,5.5,2.1,5.0*3F
$GPRMC,195308.109,A,5208.2242,N,00027.7688,W,000.0,345.8,310712,,,A*73
$GPVTG,345.8,T,,M,000.0,N,000.0,K,A*07
$GPGGA,195309.109,5208.2243,N,00027.7688,W,1,04,2.1,58.9,M,47.3,M,,0000*7E
$GPGSV,3,3,12,14,20,105,16,28,18,323,,08,07,288,,16,01,178,*7A

$GPRMC,195,3,2ÿþÿÿÿL.š945.109,A,5208.2386,N,00027.7592,W,000.0,169.5,8,323,,08,07,288,,16,01,178,*7A

$GPRMC,195,3,2ÿþÿÿÿL.š310712,,,A*70

$GPVTG,169.5,T,,M,000.0,N,000.0,K,A*06

8,07,288,,16,01,178,*7A

$GPRMC,195,3,2ÿþÿÿÿL.š310712,,,A*70

$GPVTG,169.5,T,,M,000.0,N,000.0,K,A*06

8,07,288,,16,01,178,*7A

$GPRMC,195,3,2ÿþÿÿÿL.š$GPGGA,195946.109,5208.2386,N,00027.7592,W,1.0,K,A*06

8,07,288,,16,01,178,*7A
结束日志

< >强>下面的日志来自我的C++程序<强> < /p>
$GPRMC,195307.109,A,5208.2241,N,00027.7689,W,000.0,345.8,310712,,,A*7E
$GPVTG,345.8,T,,M,000.0,N,000.0,K,A*07
$GPGGA,195308.109,5208.2242,N,00027.7688,W,1,04,2.1,58.9,M,47.3,M,,0000*7E
$GPGSA,A,3,19,03,11,22,,,,,,,,,5.5,2.1,5.0*3F
$GPRMC,195308.109,A,5208.2242,N,00027.7688,W,000.0,345.8,310712,,,A*73
$GPVTG,345.8,T,,M,000.0,N,000.0,K,A*07
$GPGGA,195309.109,5208.2243,N,00027.7688,W,1,04,2.1,58.9,M,47.3,M,,0000*7E
$GPGSV,3,3,12,14,20,105,16,28,18,323,,08,07,288,,16,01,178,*7A

$GPRMC,195,3,2ÿþÿÿÿL.š945.109,A,5208.2386,N,00027.7592,W,000.0,169.5,8,323,,08,07,288,,16,01,178,*7A

$GPRMC,195,3,2ÿþÿÿÿL.š310712,,,A*70

$GPVTG,169.5,T,,M,000.0,N,000.0,K,A*06

8,07,288,,16,01,178,*7A

$GPRMC,195,3,2ÿþÿÿÿL.š310712,,,A*70

$GPVTG,169.5,T,,M,000.0,N,000.0,K,A*06

8,07,288,,16,01,178,*7A

$GPRMC,195,3,2ÿþÿÿÿL.š$GPGGA,195946.109,5208.2386,N,00027.7592,W,1.0,K,A*06

8,07,288,,16,01,178,*7A
结束日志

问题 我已经离开了在线饲料,因为它们来,C++输出有额外的线饲料,不知道为什么? C++日志也有一些古怪的字符……? 代码

    for (int n=0;n<100;n++) {
        char INBUFFER[100];
        cv::waitKey(1000);
        bStatus = ReadFile(comport,   // Handle
                &INBUFFER,            // Incoming data
                100,                  // Number of bytes to read
                &bytes_read,          // Number of bytes read
                NULL);

        cout << "bStatus " << bStatus << endl;
        if (bStatus != 0)
        {
            // error processing code goes here
        }
        LogFile << INBUFFER;
    }
…据我所知,这与超级终端使用的设置相同。 有没有关于我做错了什么的线索

干杯

更新 所以在更新后使用字节_read并解释NMEA数据末尾的额外LF之后,我现在有了

    if (bytes_read!=0) {
        for (int i=0; i < bytes_read; i++) {
            LogFile << INBUFFER[i];
        }
    }

谢谢大家,非常感谢你们的帮助。

你们有一个
字节\u读取
var,但你们什么都不做?在我看来,您正在将整个
INBUFFER
转储到文件中,而不管实际加载了多少字节?

您的
错误处理代码在这里是真的这样吗
还是检查错误?如果是的话,你有什么建议吗?顺便说一下<代码>缓冲区:啊!不要对变量使用所有大写名称-将它们保留为
#define
符号。不,我没有在mo进行任何错误检查。干杯,我会注意大小写的变化。额外换行可能是因为GPS在每行末尾发送CR/LF序列,这可能会被解释为两个单独的换行字符。看这里。谢谢,我现在正在做。如果(bytes_read!=0){for(int i=0;i…,特别是如果
ReadFile
实际上读取了100个字节,那么您也在从缓冲区的末尾写入随机垃圾。@Oliver9523-通常最好更新帖子,或者添加到帖子中,所以早期的答案还是有一定意义的!