求:两个函数的例子
求以下两个函数的测试代码
//***************************************************************
//* 函数名 : PackBCD
//* 功能描述 : 把字符串转换为BCD码
//* 入口参数 : char *InBuf 转入字符串(ASCII)
//* int len 转出字符串长度
//* 出口参数 : unsigned char *OntBuf 转出字符串(BCD)
//* 返回值 : -1 失败, 0 成功
//***************************************************************
int PackBCD( char *InBuf, unsigned char *OutBuf, int Len )
{
int rc; // Return Value
int ActiveNibble; // Active Nibble Flag
char CharIn; // Character from source buffer
unsigned char CharOut;// Character from target buffer
rc = 0; // Assume everything OK.
ActiveNibble = 0; // Set Most Sign Nibble (MSN)
for ( ; (Len > 0); Len--, InBuf++ )
{
CharIn = *InBuf;
if ( !isxdigit ( CharIn ) ) /* validate character */
{
rc = -1;
}
else
{
if ( CharIn > '9')
{
CharIn += 9; /* Adjust Nibble for A-F */
}
}
if ( rc == 0 )
{
CharOut = *OutBuf;
if ( ActiveNibble )
{
*OutBuf++ = (unsigned char)( ( CharOut & 0xF0) | ( CharIn & 0x0F) );
}
else
{
*OutBuf = (unsigned char)( ( CharOut & 0x0F) | ( (CharIn & 0x0F) << 4) );
}
ActiveNibble ^= 1; // Change Active Nibble
}
}
return rc;
}
//***************************************************************
//* 函数名 : UnpackBCD
//* 功能描述 : BCD码转为字符串
//* 入口参数 : unsigned char *InBuf 转入字符串(BCD)
//* int len 转出字符串长度
//* 出口参数 : char *OntBuf 转出字符串(ASCII)
//* 返回值 : -1 失败, 0 成功
//****************************************************************
int UnpackBCD( unsigned char *InBuf, char *OutBuf, int Len )
{
int rc;
unsigned char ch;
int active, i;
rc = active = 0;
for ( i = 0; i < Len; i++ )
{
ch = *InBuf;
if ( active )
{
(*OutBuf=(ch&0xF))<10 ? (*OutBuf+='0') : (*OutBuf+=('A'-10));
InBuf++;
}
else
(*OutBuf=(ch&0xF0)>>4)<10 ? (*OutBuf+='0'):(*OutBuf+=('A'-10));
active ^= 1;
if ( !isxdigit ( *OutBuf ) ) //validate character
{
rc = -1;
break;
}
OutBuf++;
}
*OutBuf = 0;
return ( rc );
}
3ks