1

我正在尝试在iso 8583下面打包一条消息

00 2F 60 01 23 06 00 08 00 20 20 01 00 00 c0 00 00 92 00 00 00 00 12 01 23 48 30 30 30 30 30 30 39 53 31 30 30 30 30 30 30 30 30 30 30 30 30 35

在这里,当我从位图中提取位字段时,我得到了字段3,11,24,41,423所在11N6 format字段,字段24N3 format和字段41,42ANS format..

在发送数据包之前,数字格式的字段需要由函数更改为 BCD 格式

enter code here

void vAscii2BCD(unsigned char *pucSrc, unsigned char *pucDst, int inSize)
{
for (; inSize > 0; inSize -= 2, pucDst++) 
{
    if(!memcmp(pucSrc, "3D", 2))
    {
        pucSrc += 2;
        *pucDst = '=';

    }
    else
    {
        *pucDst = cHexDigit_to_Nibble1(*pucSrc++) << 4;
        *pucDst |= cHexDigit_to_Nibble1(*pucSrc++);
    }
}
printf("data is %s\n\n",pucDst);
}

但是当我尝试将所有'00'转换为BCD并将这个00添加到字符串的其余部分时它失败了..当我对消息执行“00”的strcat然后在接收端它会作为“ 3030"

任何人都可以建议我如何编码 00 以便在接收端也可以接收所有相应的 00。

4

1 回答 1

2

C 字符串由00(如您所说)终止,因此任何使用标准字符串操作的尝试%sstrcat将失败。您将不得不对char自己维护长度的缓冲区进行操作(如果您需要打印或发送它,请使用该长度,或者一次一个字节地自己迭代它)。

于 2013-04-25T06:15:23.727 回答