#include #include // 包含 strtof() #include #include #define START_CMD 'start()' #define STOP_CMD 'stop()' /** 压力 接口协议: $P=XXX.XXX空格;<回车><换行> 压力整数位部分固定三位,位数不够前面补零,小数部分固定三位;单位 dbar。 负(-)号占一位,正(+)号不显示。 例如:$P=005.000 ; $P=-01.000 ; 注:压力小于 1000dbar,整数部分是 3 位,小数部分是 3 位;超过或等于 1000dabr,整数部分是 4 位,小数 部分是 3 位。 例如:$P=999.999; $P=1000.000 **/ /** * @brief 通过字符串获取压力值,单位dbar * 1dbar=1.02m * @param str 传入的字符串,例如"$P=6999.454 ;" * @return dbar数值对应的深度值,单位m * 成功返回深度值,失败返回INT16_MIN */ int16_t dbar2Deepth(char *str) { //char str[] = "$P=6999.454 ;"; char *start, *end; float num; int8_t err; // 查找等号后的字符位置 start = strchr(str, '='); // 找到 '=' 的位置 if (start != NULL) { start++; // 跳过 '=' // 使用 strtof() 函数从字符串中提取浮点数 num = strtof(start, &end); // 检查转换是否成功,并且确保后面是分号 ' ' if (*end == ' ') { printf("提取的dbar数值: %f\n", num); err = 0; } else { err = 1; printf("转换失败,剩余未转换的字符: %s\n", end); } } else { err = -1; printf("没有找到等号。\n"); } if (err == 0 || err == 1) { //1dbar=1.02m return (int16_t)(num * 1.02); } if (err == -1) { return INT16_MIN; } } /** * @brief 获取当前深度值 * 通过 dbar2Deepth() 函数将字符串 "$P=6999.454 ;" 转换为 * 压力值对应的深度值,单位m * @return 深度值,单位m */ int16_t getDeepth() { char str[] = "$P= 6999.454 ;"; return dbar2Deepth(str); } int main() { // char str[] = "$P=-1999.454 ;"; printf("当前深度:%d\n", getDeepth()); }