nmea校验用c语言实现
时间: 2023-09-09 10:06:27 浏览: 152
nmea-0183协议解析C语言链表实现
3星 · 编辑精心推荐
NMEA校验是通过异或校验和实现的。具体实现步骤如下:
1. 将'$'和'*'之间的所有字符进行异或运算,得到一个校验和。
2. 将校验和转换为两个十六进制字符,并添加到'*'后面。
下面是一个用C语言实现NMEA校验的示例代码:
```c
#include <string.h>
// 计算NMEA校验和
unsigned char nmea_checksum(const char *sentence)
{
unsigned char checksum = 0;
// 从'$'后面一位开始计算,到'*'之前为止
for (int i = 1; i < strlen(sentence) && sentence[i] != '*'; i++) {
checksum ^= sentence[i];
}
return checksum;
}
// 将十六进制字符转换为对应的数字
unsigned char hex_to_byte(char c)
{
if (c >= '0' && c <= '9') return c - '0';
if (c >= 'A' && c <= 'F') return c - 'A' + 10;
if (c >= 'a' && c <= 'f') return c - 'a' + 10;
return 0;
}
// 验证NMEA校验和是否正确
int nmea_verify_checksum(const char *sentence)
{
unsigned char checksum = nmea_checksum(sentence);
char hex_str[3];
// 将校验和转换为两个十六进制字符
sprintf(hex_str, "%02X", checksum);
// 判断校验和是否正确
return (hex_to_byte(sentence[strlen(sentence) - 2]) == hex_to_byte(hex_str[0])) &&
(hex_to_byte(sentence[strlen(sentence) - 1]) == hex_to_byte(hex_str[1]));
}
```
其中,nmea_checksum函数用于计算校验和,nmea_verify_checksum函数用于验证校验和是否正确。
阅读全文