C# 如何判断NMEA或TAIP语句是否有效

C# 如何判断NMEA或TAIP语句是否有效,c#,nmea,taip,C#,Nmea,Taip,这个问题(为了自私地提升我的微观声誉,我打算自己回答)是一个c代码,用来判断NMEA或TAIP格式的给定句子是否有效。。。基本上计算校验和应该是什么,并将其与给定的校验和进行比较,然后返回真或假…这是我提出的代码…Carson63000提供的答案有一定的可信度 类程序 { 静态void Main(字符串[]参数) { Console.WriteLine(isnNameMessageValid($GPRMC,102957.92,A,4104.8569,N,00836.4700,W,0.000,5.

这个问题(为了自私地提升我的微观声誉,我打算自己回答)是一个c代码,用来判断NMEA或TAIP格式的给定句子是否有效。。。基本上计算校验和应该是什么,并将其与给定的校验和进行比较,然后返回真或假…

这是我提出的代码…Carson63000提供的答案有一定的可信度

类程序
{
静态void Main(字符串[]参数)
{
Console.WriteLine(isnNameMessageValid($GPRMC,102957.92,A,4104.8569,N,00836.4700,W,0.000,5.822230211,0,W,A*2B)).ToString();
Console.WriteLine(isnMemessageValid($GPRMC,102957.92,A,4104.8569,N,00836.4700,W,0.000,5.822230211,0,W,A*1B));//应为false,将校验和从2B更改为1B

Console.WriteLine(IsTAIPMessageValid(“>RPV68168+4008572-0828021400026912;ID=M123;*dRPV68168+4008572-0828021400026912;ID=M123;*cRPV54366+4001403-0828656300005512;ID=GH75;*7cRPV54366+4001403-0828656300005512;ID=GH75;*7请看一看是的,我的答案中有一部分归功于Carson63000的答案,但他只涵盖了NMEA消息……我的答案(我可以在7小时内发布)也将涵盖TAP消息…对使用两种消息格式的用户很有帮助…固定问题:句子不是GPS的一部分。“句子”是通信协议(如NMEA或TAP)的一部分,用于和一些(但决不是全部)GPS接收器通信(例如,支持NMEA或TAIP的接收人)。
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(IsNMEAMessageValid("$GPRMC,102957.92,A,4104.8569,N,00836.4700,W,0.000,5.822,230211,0,W,A*2B").ToString());
        Console.WriteLine(IsNMEAMessageValid("$GPRMC,102957.92,A,4104.8569,N,00836.4700,W,0.000,5.822,230211,0,W,A*1B").ToString());   // should be false, changed the checksum from 2B to 1B

        Console.WriteLine(IsTAIPMessageValid(">RPV68168+4008572-0828021400026912;ID=M123;*d<").ToString());
        Console.WriteLine(IsTAIPMessageValid(">RPV68168+4008572-0828021400026912;ID=M123;*c<").ToString());    // should be false, changed the checksum from d to c

        Console.WriteLine(IsTAIPMessageValid(">RPV54366+4001403-0828656300005512;ID=GH75;*7c<").ToString());
        Console.WriteLine(IsTAIPMessageValid(">RPV54366+4001403-0828656300005512;ID=GH75;*7b<").ToString());    // should be false, changed the checksum from 7c to 7b

        Console.ReadLine();
    }

    private static bool IsNMEAMessageValid(string sentence)
    {
        // Checksum for NMEA includes XOR on all characters between (not including) the $ and the *, including the commas...
        int checksum = Convert.ToByte(sentence[sentence.IndexOf('$') + 1]);
        for (int i = sentence.IndexOf('$') + 2; i < sentence.IndexOf('*'); i++)
        {
            checksum ^= Convert.ToByte(sentence[i]);
        }
        int givenChecksum = Convert.ToInt16(sentence.Split('*')[1], 16);
        return checksum == givenChecksum;
    }

    private static bool IsTAIPMessageValid(string sentence)
    {
        // Checksum for TAIP includes XOR on all characters starting with > and up to and including *
        int checksum = Convert.ToByte(sentence[sentence.IndexOf('>')]);
        for (int i = sentence.IndexOf('>') + 1; i < sentence.IndexOf('*') + 1; i++)
        {
            checksum ^= Convert.ToByte(sentence[i]);
        }
        char[] splitChars = { '*', '<' };
        int givenChecksum = Convert.ToInt16(sentence.Split(splitChars)[1], 16);
        return checksum == givenChecksum;
    }
}