demo3/deepth.c

94 lines
2.1 KiB
C
Raw Normal View History

2024-11-30 02:15:30 +00:00
#include <stdio.h>
#include <stdlib.h> // 包含 strtof()
#include <string.h>
#include <stdint.h>
#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());
}