如何解决使用 c 程序读取 NMEA 字符串
我正在尝试制作一个将字符串写入的 c 程序,但我希望它只读取其中的一小部分。 我尝试阅读的 NMEA 电报是 $WIXDR,并且确实收到了必要的字符串。 这是我进入 cpu 的两个字符串示例:
.cat-item {
position: relative;
width: 140px;
}
.cat-items .active-item::before {
content: '';
display: block;
position: absolute;
top: 40px;
left: calc(50%);
width: 0;
height: 0;
border-style: solid;
border-width: 0 10px 10px;
border-color: transparent transparent #397707;
transform: translateX(-50%);
}
如果只有 1 个字符串(不是 C 和 V),这对我来说不是问题。 这里的问题是它是 2 个单独的字符串。一个是温度,一个是下雨信息。
我唯一感兴趣的是来自
的值“1.9”$WIXDR,C,1.9,H,83.2,P,1023.9,0*46
$WIXDR,V,0.01,M,Z,10,s,R,0.8,0.0,1,89.9,2,3*60
这是我目前所拥有的:
$WIXDR,0......
还有更多,但这是我拥有的主要部分。
解决方法
我已经找到了我自己问题的答案。按照我的意图执行的代码如下: 我的小代码所做的,就是寻找字母C,如果找到了C,它就会把它后面的值放到“OutSideTemp”中。我必须寻找 C 的原因是,也收到了一个与字母 V(Rain)类似的字符串。 如果有人以某种方式提出任何意见可能会更好,我不介意,但这里的这一小部分可以满足我的需求。
这是我收到的电报示例(我希望将值 3.0 放入“OutSideTemp”中): $WIXDR,C,3.0,H,59.2,P,1026.9,04F $WIXDR,V,0.00,M,Z,s,R,0.0,1,89.9,2,358
void ProcessXDR(char* buffPtr)
{
char valueBuff[10];
int result,x;
float OutSideTemp;
USHORT uOutSideTemp;
// char charTemperature,charRain
IODBerr eCode;
// Look for "C"
result = ReadAsciiVariable(buffPtr,&valueBuff[0],&buffPtr,sizeof(valueBuff));
// sscanf(&valueBuff[0],"%f",&charTemperature);
if (valueBuff[0] == 'C')
//Outside Temperature
result = ReadAsciiVariable(buffPtr,sizeof(valueBuff));
sscanf(&valueBuff[0],&OutSideTemp);
OutSideTemp *= 10;
uOutSideTemp = (USHORT)OutSideTemp;
eCode = IODBWrite(ANALOG_IN,REG_COM_XDR,&uOutSideTemp,NULL);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。