文字列を処理する 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 つは気温、もう 1 つは雨情報です。
私が興味を持っているのは、値「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);
}
他にもありますが、これが私が持っている主要な部分です。