没有合适的资源?快使用搜索试试~ 我知道了~
TLV解析算法
1星 需积分: 34 35 下载量 11 浏览量
2019-05-07
10:00:44
上传
评论 2
收藏 5KB TXT 举报
温馨提示
试读
6页
银联标准PBOC3.0,TLV解析C语言算法,解析出Tag length Value
资源推荐
资源详情
资源评论
void ConS(unsigned char *buffer, int len, int count)
{
int currentTLVIndex = 0;
int currentIndex = 0;
int currentStatus = 'T'; //状态字符
unsigned long valueSize = 0;
unsigned char Tag[100][32]; //标记
unsigned char Length[100][32]; //数据长度
unsigned char Value[100][1024*2]; //数据
unsigned int TagSize[100]; //标记占用字节数
unsigned int LengthSize[100]; //数据长度占用字节数
unsigned char Tag1[32];
char inipath[256];
memset(inipath,0,sizeof(inipath));
sprintf(inipath,"%s","C:\\Program Files\\浪潮集团金融事业部\\DevCtrler\\module\\PBOC.ini");
unsigned char Tagstr[32];
unsigned char Lengthstr[32];
unsigned char Valuestr[1024*2];
int status=1;
int ValueLen;
while(currentIndex < len)
{
switch(currentStatus)
{
case 'T':
valueSize = 0;
//判断是否单一结构
{
int currentTLVIndex = 0;
int currentIndex = 0;
int currentStatus = 'T'; //状态字符
unsigned long valueSize = 0;
unsigned char Tag[100][32]; //标记
unsigned char Length[100][32]; //数据长度
unsigned char Value[100][1024*2]; //数据
unsigned int TagSize[100]; //标记占用字节数
unsigned int LengthSize[100]; //数据长度占用字节数
unsigned char Tag1[32];
char inipath[256];
memset(inipath,0,sizeof(inipath));
sprintf(inipath,"%s","C:\\Program Files\\浪潮集团金融事业部\\DevCtrler\\module\\PBOC.ini");
unsigned char Tagstr[32];
unsigned char Lengthstr[32];
unsigned char Valuestr[1024*2];
int status=1;
int ValueLen;
while(currentIndex < len)
{
switch(currentStatus)
{
case 'T':
valueSize = 0;
//判断是否单一结构
if((status == 1 && buffer[currentIndex] & 0x20) != 0x20)
{
// tlvEntity[currentTLVIndex].Sub_TLVEntity = NULL; //单一结构时将子Tag置空
//判断是否多字节Tag
if((buffer[currentIndex] & 0x1f) == 0x1f)
{
int endTagIndex = currentIndex;
while((buffer[++endTagIndex] & 0x80) == 0x80); //判断第二个字节的最高位是否为1
int tagSize = endTagIndex - currentIndex + 1; //计算Tag包含多少字节
memset(Tag[currentTLVIndex],0,sizeof(Tag[currentTLVIndex]));
memcpy(Tag[currentTLVIndex], buffer + currentIndex, tagSize);
Tag[currentTLVIndex][tagSize] = 0;
TagSize[currentTLVIndex] = tagSize;
currentIndex += tagSize;
}
else
{
memset(Tag[currentTLVIndex],0,sizeof(Tag[currentTLVIndex]));
// Tag = new unsigned char[1];
memcpy(Tag[currentTLVIndex], buffer + currentIndex, 1);
Tag[currentTLVIndex][1] = 0;
TagSize[currentTLVIndex] = 1;
currentIndex += 1;
}
}
{
// tlvEntity[currentTLVIndex].Sub_TLVEntity = NULL; //单一结构时将子Tag置空
//判断是否多字节Tag
if((buffer[currentIndex] & 0x1f) == 0x1f)
{
int endTagIndex = currentIndex;
while((buffer[++endTagIndex] & 0x80) == 0x80); //判断第二个字节的最高位是否为1
int tagSize = endTagIndex - currentIndex + 1; //计算Tag包含多少字节
memset(Tag[currentTLVIndex],0,sizeof(Tag[currentTLVIndex]));
memcpy(Tag[currentTLVIndex], buffer + currentIndex, tagSize);
Tag[currentTLVIndex][tagSize] = 0;
TagSize[currentTLVIndex] = tagSize;
currentIndex += tagSize;
}
else
{
memset(Tag[currentTLVIndex],0,sizeof(Tag[currentTLVIndex]));
// Tag = new unsigned char[1];
memcpy(Tag[currentTLVIndex], buffer + currentIndex, 1);
Tag[currentTLVIndex][1] = 0;
TagSize[currentTLVIndex] = 1;
currentIndex += 1;
}
}
剩余5页未读,继续阅读
资源评论
- 魔琴师2020-07-291分都觉得多
xiaobaibaiqw
- 粉丝: 10
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功