我的外部设备每 5 秒向我发送一次数据,如下所示:
+DATA: 43 BYTES FROM 0000:0000 (043)
Nodo_8:(T=21.45,HR=45.65,DW=9.34,Vcc=3.46V)
我需要这里的一些值来将它们保存在 mysql 数据库中。因此,使用 strtok 我想获得值 043、21.45、45.65、9.34、3.46。
我编写了以下从设备读取缓冲区的代码:
int learn_port(int fd)
{
int n;
char buff[83];
for (;;)
{
n=read(fd,buff,83);
printf("%s", buff);
char dev_a[25] = "", temp_a[25] = "", hr_a[25] = "", dw_a[25] = "", vcc_a[25] = "";
char* ptr;
ptr = strtok(buff, "+DATA:BYTESFROM()\nNodo_ ,=T:HR:DW:Vcc()");
int i = 0;
while (ptr != NULL)
{
ptr = strtok(NULL, "+DATA:BYTESFROM()\nNodo_ ,=T:HR:Dw:Vcc()");
if (i == 2)
strcat(dev_a, ptr); // copies device
if (i == 5)
strcat(temp_a, ptr); // copies T
if (i == 6)
strcat(hr_a, ptr); // copies HR
if (i == 7)
strcat(dw_a, ptr); // copies DW
if (i == 10)
strcat(vcc_a, ptr);
i++;
}
sleep(1);
printf("%s, %s, %s, %s, %s\n", dev_a, temp_a,hr_a,dw_a,vcc_a);
}
但是我有一些奇怪的结果,我不知道哪里有问题。终端第一次返回我:
+DATA: 43 BYTES FROM 0000:0000 (043)
Nodo_8:(T=21.45,HR=45.65,DW=9.34,Vcc=3.46V)
??,??043, 21.45, 45.65, 9.34, 3.46
5秒后
+DATA: 43 BYTES FROM 0000:0000 (043)
Nodo_8:(T=21.23,HR=42.65,DW=9.45,Vcc=3.46V)
?3.46043, 21.23, 42.65, 9.45, 3.46
5秒后
+DATA: 43 BYTES FROM 0000:0000 (051)
Nodo_8:(T=21.67,HR=42.45,DW=9.23,Vcc=3.46V)
?3.46051, 21.67, 42.45, 9.23, 3.46
等有谁知道问题出在哪里,我在 051 之前有 3.46 吗?strtok有什么问题吗?我的结果希望为 043、21.67、42.45、9.23、3.46