Моего внешним устройства посылает мне данные каждые 5 секунд, как эти:странные лексемы результатов с использованием strtok
+DATA: 43 BYTES FROM 0000:0000 (043)
Nodo_8:(T=21.45,HR=45.65,DW=9.34,Vcc=3.46V)
мне нужно некоторые значения из здесь, чтобы сохранить их в тузде datadase. Поэтому с использованием 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
и т.д. Кто-нибудь знает, где проблема и у меня есть 3,46? до 051? Есть ли проблемы с strtok? Мои результаты хотят быть 043, 21.67, 42.45, 9.23, 3.46