Linux c 源码(getvalbypos根据位置和特定的字符解析所需的信息)

来源:互联网 发布:如月疑云 知乎 编辑:程序博客网 时间:2024/06/06 00:21
char * getvalbypos( char *pack, int pos, char *cSec, char *val )
pack:传入的数据缓冲区数据
pos:需要获得的位置数据,如果是0表示得到第一个数据,1表示得到第二个数据  

cSec:其实就是一个分割字符,由用户指定,例如下面例子的 '| ' 

val:返回值,返回用户所需的数据元素,例如下面例子的0200 1101  等等 


下面是示例代码:

#include<stdio.h>#include<string.h>#include<stdlib.h>char * getvalbypos(const char *pack, int pos, char *cSec, char *val ){        int     num = 0;        char    *p = NULL;        char    *tmp = NULL;        p = strchr( pack, cSec[0] );        if( p == NULL )        {                strcpy( val, pack );                return val;        }        tmp = pack;        while( p != NULL )        {                num++;                if( num > pos )       break;                tmp = p + 1;                p = ( char * )strchr( tmp, cSec[0] );                if( p == NULL ) return NULL;        }        memcpy( val, tmp, p - tmp );        return val;}int main(){        char * str=(char *)malloc(100);        const char *buf="0200|1101|000001|122445|20151117|1999999999|";        int i=0;        for(i=0;i<6;i++){                getvalbypos( buf, i, "|", str );                printf("%d:%s\n",i,str);        }        return 0;}
输出结果:

0:0200
1:1101
2:000001
3:122445
4:20151117
5:1999999999

此函数是金融类8583报文协议中常用的解析函数,方便解析数据域。
例如:buf字符串内容 0200消息类型,1101交易代码,000001流水号,122445是时间,20151117是日期,1999999999是商户号。
当然这里只是举例说明,更复杂的8583报文组包和解包函数之后会具体介绍。

1 0
原创粉丝点击