我正在从序列GPS中检索NMEA句子。然后字符串就像我期望的那样。问题在于解析这样的句子时:
$GPRMC,040302.663,A,3939.7,N,10506.6,W,0.27,358.86,200804,,*1A
我使用一些简单的代码来确保我有正确的意义:
string[] Words = sBuffer.Split(',');
foreach (string item in Words)
{
if (item == "$GPRMC")
{
return "Correct Sentence";
}
else
{
return "Incorrect Sentence
}
}
我为该示例添加了该位置的返回值。我已将拆分结果打印到文本框中,并且已经看到$ GPRMC确实在某个时刻出现在item变量中。如果字符串遇到了为什么if语句不会捕获?是$?我怎么能麻烦拍这个呢?
答案 0 :(得分:2)
我读了NMEA GPS已经有一段时间......
您是否需要比较与NMEA数据类型对应的子字符串而不是整个NMEA缓冲区元素? .Split方法在NMEA语句中的所有逗号上拆分sBuffer,以便您拥有每个单独的元素。但是,您正在针对循环中的第一个元素测试子字符串,这意味着您要查看每个元素。混乱...
所以你的测试看起来不会更好:
string[] Words=sBuffer.Split(',');
if(String.Compare(Words[0],"$GPRMC")==0)
{
return "Correct Sentence";
}
else
{
return "Incorrect Sentence
}
NMEA流是否有可能输出Min Data,GPRMC句子以外的句子,你需要重读才能得到正确的句子?此外,您确定GPS的数据类型为$GPRMC
而不是GPRMC
吗?我不认为数据类型中应该有$
。
即,伪:
do {
buffer=read_NMEA(); //making sure the entire sentence is read...
array=split(buffer,",");
data_type=buffer[0];
}
while(data_type!="GPRMC" || readcount++<=MAX_NMEA_READS)
要调试循环,请尝试控制器写入元素:
string[] Words = sBuffer.Split(',');
foreach (string item in Words)
{
Console.WriteLine(item);
}
答案 1 :(得分:1)
你在计算校验和吗,我没有看到它。
答案 2 :(得分:0)
编辑:我的答案没有改进,正如评论员mtrw所说,==
被字符串类重载。我错了。
在我看来你的if
- 陈述是错误的。使用==
运算符,您正在检查它是否是相同的引用(当然不会是这种情况)。要简单地比较两个字符串是否包含相同的值,请使用String.Equals()
。