C语言根据协议分割获取字符串单元

简介: C语言根据协议分割获取字符串单元

第一次用MarkDown写公众号文章,希望多多支持,技术也需要升级!


协议做如下规定


规定数据协议:


序列号    长度    状态字    数据长度   数据1   数据2    数据3


以空格作为数据单元。

例如:

00001 00007 1   3  34567 26358 32698   
 (1)   (2) (3) (4)  (5)   (6)   (7)

以上各个编号字段代表的基本含义如下:


(1)00001就是数字1,即代表序列号为1


(2)00007就是数字7,即代表长度为7


(3)1代表状态字


(4)3代表数字长度


(5)34567代表数据1


(6)26358代表数据2


(7)32698代表数据3


这样就找到规律了,假设数据都为整型或者负整型,我们就可以根据这个规则来实现以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//根据空格拆分字符串 
int partition(char *src, char *par, int pos)
{
  int i,j;
  i = pos;
  //取得一个非空字符 
  while(src[i] == ' ')
    ++i;
  if(src[i] != '\0')
  {
    j = 0;
    while((src[i] != '\0') && (src[i] != ' '))
    {
        //判断条件是否满足 
        if((src[i] > '9') || (src[i] < '0') && (src[i] != '-'))
            return -1 ;
      par[j] = src[i];
      ++i;
      ++j;
    }
    par[j]='\0';
    return i;
  }
  else
    return -1;
}
int main(void)
{
    int serial_number ;
    int lenght ;
    int status ;
    int data_length;
    int data1,data2,data3; 
    int position = 0;
    int para_flag = 1 ; 
    int parameter_item = 0;
    char partition_string[20] = {0};
    char *data = "00001 00007 1 3 34567 26358 32698"; 
    while(para_flag)
    {
        if(para_flag == 0)
            break ; 
        if((position = partition(data,partition_string,position)) != -1)
        {
            ++parameter_item ;
            switch(parameter_item)
            {
                case 1:
                    serial_number = atoi(partition_string);
                    break ;
                case 2:
                    lenght = atoi(partition_string);
                    break ;
                case 3:
                    status = atoi(partition_string);    
                    break ;
                case 4:
                    data_length = atoi(partition_string);   
                    break ;
                case 5:
                    data1 = atoi(partition_string); 
                    break ;
                case 6:
                    data2 = atoi(partition_string); 
                    break ;
                case 7: 
                    data3 = atoi(partition_string); 
                    para_flag = 0 ;
                    break ;
            }
        }
    }
    printf("序号:%d\n",serial_number);
    printf("长度:%d\n",lenght);
    printf("状态字:%d\n",status);
    printf("数据长度:%d\n",data_length);
    printf("数据1:%d\n",data1);
    printf("数据2:%d\n",data2);
    printf("数据3:%d\n",data3);
    return 0;   
} 

运行结果:

640.jpg

目录
相关文章
|
5月前
|
NoSQL 程序员 Redis
C语言字符串的设计缺陷
C语言字符串的设计缺陷
52 1
|
1月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
2月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
|
2月前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
125 7
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
2月前
|
C语言
C语言 字符串操作函数
本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。
|
2月前
|
缓存 网络协议 网络性能优化
C语言 网络编程(二)TCP 协议
TCP(传输控制协议)是一种面向连接、可靠的传输层协议,通过校验和、序列号、确认应答等机制确保数据完整性和可靠性。通信双方需先建立连接,再进行通信,采用三次握手建立连接,四次挥手断开连接。TCP支持任意字节长度的数据传输,具备超时重传、流量控制及拥塞控制机制。三次握手用于同步序列号和确认双方通信能力,四次挥手则确保双方均能完成连接关闭操作,保证数据传输的可靠性。
|
2月前
|
网络协议 视频直播 C语言
C语言 网络编程(三)UDP 协议
UDP(用户数据报协议)是一种无需建立连接的通信协议,适用于高效率的数据传输,但不保证数据的可靠性。其特点是无连接、尽力交付且面向报文,具备较高的实时性。UDP广泛应用于视频会议、实时多媒体通信、直播及DNS查询等场景,并被许多即时通讯软件和服务(如MSN/QQ/Skype、流媒体、VoIP等)采用进行实时数据传输。UDP报文由首部和数据部分组成,首部包含源端口、目的端口、长度和校验和字段。相比TCP,UDP具有更高的传输效率和更低的资源消耗。
|
3月前
|
C语言
【C语言】字符串及其函数速览
【C语言】字符串及其函数速览
30 4
|
3月前
|
C语言
【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)
perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
61 0