关闭

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

标签: 源码金融类8583报文解包函数
532人阅读 评论(0) 收藏 举报
分类:
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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:174443次
    • 积分:3657
    • 等级:
    • 排名:第8867名
    • 原创:172篇
    • 转载:10篇
    • 译文:2篇
    • 评论:25条
    友情链接
    博客专栏