//*----------------------------------------------------------------------------
//* 函数名称 : gsmInvertNumbers
//* 功能描述 : 正常顺序的字符串转换为两两颠倒的字符串,
// : 若长度为奇数,补'F'凑成偶数
// : 如:"8613851872468" --> "683158812764F8"
//* 入口参数 : pSrc: 源字符串指针 pDst: 目标字符串指针
// : nSrcLength: 源字符串长度
//* 出口参数 : 目标字符串长度
//*----------------------------------------------------------------------------
int gsmInvertNumbers(const char* pSrc, char* pDst, int nSrcLength)
{
int i;
int nDstLength; // 目标字符串长度
char ch; // 用于保存一个字符
// 复制串长度
nDstLength = nSrcLength;
// 两两颠倒
for(i=0; i<nSrcLength;i+=2)
{
ch = *pSrc++; // 保存先出现的字符
*pDst++ = *pSrc++; // 复制后出现的字符
*pDst++ = ch; // 复制先出现的字符
}
// 源串长度是奇数吗?
if(nSrcLength & 1)
{
*(pDst-2) = 'F'; // 补'F'
nDstLength++; // 目标串长度加1
}
// 输出字符串加个结束符
*pDst = '\0';
// 返回目标字符串长度
return nDstLength;
}
//*----------------------------------------------------------------------------
//* 函数名称 : gsmSerializeNumbers
//* 功能描述 : 两两颠倒的字符串转换为正常顺序的字符串
// : 如:"683158812764F8" --> "8613851872468"
//* 入口参数 : pSrc: 源字符串指针 pDst: 目标字符串指针
// : nSrcLength: 源字符串长度
//* 出口参数 : 目标字符串长度
//*----------------------------------------------------------------------------
int gsmSerializeNumbers(const char* pSrc, char* pDst, int nSrcLength)
{
int i;
int nDstLength; // 目标字符串长度
char ch; // 用于保存一个字符
// 复制串长度
nDstLength = nSrcLength;
// 两两颠倒
for(i=0; i<nSrcLength;i+=2)
{
ch = *pSrc++; // 保存先出现的字符
*pDst++ = *pSrc++; // 复制后出现的字符
*pDst++ = ch; // 复制先出现的字符
}
// 最后的字符是'F'吗?
if(*(pDst-1) == 'F')
{
pDst--;
nDstLength--; // 目标字符串长度减1
}
// 输出字符串加个结束符
*pDst = '\0';
// 返回目标字符串长度
return nDstLength;
}