【发布时间】:2021-05-01 20:49:26
【问题描述】:
我正在尝试制作一个可以处理字符串的 c 程序,但我希望它只读取其中的一小部分。 我尝试阅读的 NMEA 电报是 $WIXDR,并且确实收到了必要的字符串。 这是我进入 CPU 的 2 个字符串示例:
$WIXDR,C,1.9,C,0,H,83.2,P,0,P,1023.9,H,0*46
$WIXDR,V,0.01,M,0,Z,10,s,0,R,0.8,M,0,V,0.0,M,1,Z,0,s,1,R,0.0,M,1,R,89.9,M,2,R,0.0,M,3*60
如果它只有 1 个字符串(不是 C 和 V),这对我来说不是问题。 这里的问题是它是 2 个单独的字符串。一个是温度,一个是降雨信息。
我唯一感兴趣的是来自
的值“1.9”$WIXDR,C,1.9,C,0......
这是我目前所拥有的:
void ProcessXDR(char* buffPtr)
{
char valueBuff[10];
int result, x;
float OutSideTemp;
USHORT uOutSideTemp;
// char charTemperature, charRain
IODBerr eCode;
//Outside Temperature
result = ReadAsciiVariable(buffPtr, &valueBuff[0], &buffPtr, sizeof(valueBuff));
sscanf(&valueBuff[0],"%f",&OutSideTemp);
OutSideTemp *= 10;
uOutSideTemp = (USHORT)OutSideTemp;
eCode = IODBWrite(ANALOG_IN,REG_COM_XDR,1,&uOutSideTemp,NULL);
}
// XDR ...
if(!strcmp(&nmeaHeader[0],"$WIXDR"))
{
if(PrintoutEnable)printf("XDR\n");
ProcessXDR(buffPtr);
Timer[TIMER_XDR] = 1200; // Update every minute
ComStateXDR = 1;
eCode = IODBWrite(DISCRETE_IN,REG_COM_STATE_XDR,1,&ComStateXDR,NULL);
}
还有更多,但这是我的主要部分。
【问题讨论】:
-
您实际上并没有提出具体问题,也没有描述代码中出现的具体问题。为什么
C和V会给您带来问题?如果您需要进一步的帮助,请提供完整的代码 aminimal reproducible example,并在代码中明确说明具体问题。 -
“我唯一感兴趣的东西”听起来像是在寻找某种投影,但很难说。
-
对于包含“C”的字符串,我希望它将“C”之后的值写入uOutsideTemp。对于包含“V”的字符串,我不希望它做任何事情。对我来说唯一有趣的是这种情况下的值“1.9”。
-
完整代码大约 1800 行...它用于读取不同的 nmea-strings(不仅是 XDR)发送值给 conning,还有更多...所有其他 nmea-strings 都在工作正如预期的那样,但这对我来说是新的。我有字符串,但不知道如何收集 1.9 的一个值并将其写入 uOutsideTemp