C 从以太网分割数据

C 从以太网分割数据,c,C,我需要从以太网中分离数据。数据格式如下: ZMXXX,angle*CHCK 其中角度是数字。例如:ZMXXX,900*5A 我需要分开的ZMXXX,900和5A。我写了这个函数: void split_data(char analyze[]) { char *words[5]; uint8_t i=0; words[i] = strtok(analyze,"*"); while(words[i]!=NULL) { words[++i]

我需要从以太网中分离数据。数据格式如下:

ZMXXX,angle*CHCK
其中角度是数字。例如:
ZMXXX,900*5A

我需要分开的
ZMXXX,900
5A
。我写了这个函数:

void split_data(char analyze[])
{    
    char *words[5]; uint8_t i=0;
    words[i] = strtok(analyze,"*");

    while(words[i]!=NULL)
    {
        words[++i] = strtok(NULL,"*");
    }
}
结果如下:

现在,我如何从变量中获取这些数据:

words[0]
words[1]

假设您提到的格式是固定的,那么就不需要昂贵且容易出错的strtok()

使用好的旧方法:

像这样使用它:

#define _POSIX_C_SOURCE 200809L /* To make strdup() available. */

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

int parse(char *, char **);

int main(void)
{
   char data[] = "ZMXXX,900*5A";
   char * words[2];

   if (-1 == parse(data, words))
   {
     perror("parse() failed");
     exit(EXIT_FAILURE);
   }

   printf("word 1 = '%s'\n", words[0]);
   printf("word 2 = '%s'\n", words[1]);

   free(words[0]);
   free(words[1]);

   return EXIT_SUCCESS;
}

注意,这不是标准C,而是POSIX。可能需要使用一个适当的定义来激活它。

嗯,完全一样<代码>单词[0],
单词[1]
,等等。到底是什么问题?以太网适合哪里?@EdHeal:可能那部分还没有出现。你说的“获取此数据”是什么意思?您已正确拆分数据。您可以通过立即返回来放弃示例代码中的工作。您不能从函数返回
单词
,但可以在显示的循环将其拆分后使用它。或者可以重新设计函数,以便传入由函数初始化/设置的指针数组。您将返回找到的字段数,但如果格式已知且固定,则您知道答案是2。因此,您可以使用
int split_data(char analyze[],char**words,int max_words)
作为签名。我需要拆分此数据:
$ZMXXX,angle*CHCK
其中:ZMXXX是命令角度是角度(900=90°)CHCK=校验和,例如:
$ZMXXX,900*5A
我从以太网接收的此数据,删除$and。在此之后,我得到了以下格式的数据:ZMXXX,900*5A,我需要拆分这个字符串。
#define _POSIX_C_SOURCE 200809L /* To make strdup() available. */

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

int parse(char *, char **);

int main(void)
{
   char data[] = "ZMXXX,900*5A";
   char * words[2];

   if (-1 == parse(data, words))
   {
     perror("parse() failed");
     exit(EXIT_FAILURE);
   }

   printf("word 1 = '%s'\n", words[0]);
   printf("word 2 = '%s'\n", words[1]);

   free(words[0]);
   free(words[1]);

   return EXIT_SUCCESS;
}
word 1 = 'ZMXXX,900'
word 2 = '5A'