串口发送的计程仪航速信息,怎么提取出航速信息,c语言举例子详细说明并且注释每行
时间: 2024-12-28 19:40:35 浏览: 4
在C语言中,如果我们有一段接收到的串口数据,它可能包含了计程仪航速的信息,比如格式化为“XX.YY”这样的十进制小数形式,其中“XX”代表整数部分,而“YY”代表小数部分。下面是一个简单的示例如何解析并提取航速信息:
```c
#include <stdio.h>
#include <string.h> // 包含字符串处理函数
// 定义数据接收缓冲区
char serial_data[] = "035.23"; // 假设这就是从串口接收到的数据,格式如"XX.YY"
// 函数定义:提取并打印航速
void extract_speed(char* data) {
int whole_number, decimal_number;
// 检查数据长度是否足够,一般至少需要两位
if (strlen(data) < 3) {
printf("Invalid data format.\n");
return;
}
// 提取整数部分(XX)
whole_number = data[0] - '0'; // '0'减去数据的第一个字符得到数字
if (data[1] != '.') {
whole_number = whole_number * 10 + (data[1] - '0'); // 如果有多位,再乘以10并加上下一位的数值
}
// 提取小数部分(YY)
decimal_number = data[strlen(data) - 2] - '0'; // 从最后一个位置开始,减去'0'
if (data[strlen(data) - 1] == '.') {
// 如果小数点存在,忽略它
decimal_number /= 10;
} else {
decimal_number *= 10; // 小数点不存在,直接乘以10
decimal_number += data[strlen(data) - 1] - '0'; // 加上小数部分
}
// 计算总速度并打印
float total_speed = whole_number + (float)decimal_number / 100.0;
printf("Received speed: %.2f knots\n", total_speed);
}
int main() {
extract_speed(serial_data); // 调用提取航速函数
return 0;
}
```
在这个示例中,我们首先检查数据长度,然后提取整数部分和小数部分。注意,由于字符串处理,我们需要考虑字符和数字之间的对应关系(例如,字符'0'对应数值0)。最后,我们将两部分相加并转换成浮点数以得到总航速(单位:knots,海里/小时)。
阅读全文