这个问题其实就是数据的扩展和压缩问题,
例如有数据 0x01,0x02,0x03,长度为3,
则扩展后得到字符串“010203”,长度为6,
又如有字符串“010203”,长度为6,
则压缩后得到字符串 0x01,0x02,0x03,长度为3,
有如下两个函数分别实现数据的扩展和压缩:
//将数据扩展,例如0x12 0xAC 0x0D则扩展为"12AC0D"
//参数:
//pSrc:要扩展的字符串
//pDest:扩展后的字符串
//len:要扩展的字符串的字符个数
//注意:任何字符串都可以扩展

程序代码:
void uti_unpack(unsigned char *pSrc, unsigned char * pDest, int len)
{
unsigned char ch1, ch2;
for( int i = 0; i < len; i++ )
{
ch1 = (pSrc[i] & 0xF0) >> 4;
ch2 = pSrc[i] & 0x0F;
ch1 += ( (ch1 > 9 ) ? 0x37 : 0x30 );
ch2 += ( (ch2 > 9 ) ? 0x37 : 0x30 );
pDest[i*2] = ch1;
pDest[i*2 + 1] = ch2;
}
}
//将数据压缩,例如"12AC0D"则压缩为0x12 0xAC 0x0D
//参数:
//pSrc:要压缩的字符串
//pDest:压缩后的字符串
//len:要压缩的字符串的字符个数
//注意:要压缩的字符串里的字符只能有"0-9 a-z A-Z"

程序代码:
void uti_pack(unsigned char *pSrc, unsigned char *pDest, int len)
{
char ch1, ch2;
for( int i = 0; i < (len / 2); i++ )
{
ch1 = pSrc[i*2];
ch2 = pSrc[i*2 + 1];
(ch1 >= 'a' && ch1 <= 'z') ? (ch1 -= 32) : (ch1);
(ch2 >= 'a' && ch2 <= 'z') ? (ch2 -= 32) : (ch2);
ch1 -= ( (ch1 > '9' ) ? 0x37 : 0x30 );
ch2 -= ( (ch2 > '9' ) ? 0x37 : 0x30 );
pDest[i] = ( ch1 << 4 ) | ch2;
}
}
也可以参看这个帖子:http://bbs.bccn.net/viewthread.php?tid=324089&page=1#pid1867221
[
本帖最后由 kwbplcz 于 2010-11-3 16:39 编辑 ]