教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

短信系统中的 7bit 编码(c)

来源:网络收集 时间:2026-09-04
导读: // 7-bit编码 // pSrc: 源字符串指针 // pDst: 目标编码串指针 // nSrcLength: 源字符串长度 // 返回: 目标编码串长度 int gsmEncode7bit(const char* pSrc, unsigned char* pDst, int nSrcLength) { int nSrc; // 源字符串的计数值 int nDst; // 目标编码串

// 7-bit编码

// pSrc: 源字符串指针

// pDst: 目标编码串指针

// nSrcLength: 源字符串长度

// 返回: 目标编码串长度

int gsmEncode7bit(const char* pSrc, unsigned char* pDst, int nSrcLength) {

int nSrc; // 源字符串的计数值

int nDst; // 目标编码串的计数值

int nChar; // 当前正在处理的组内字符字节的序号,范围是0-7 unsigned char nLeft; // 上一字节残余的数据

// 计数值初始化

nSrc = 0;

nDst = 0;

// 将源串每8个字节分为一组,压缩成7个字节

// 循环该处理过程,直至源串被处理完

// 如果分组不到8字节,也能正确处理

while(nSrc<nSrcLength)

{

// 取源字符串的计数值的最低3位

nChar = nSrc & 7;

// 处理源串的每个字节

if(nChar == 0)

{

// 组内第一个字节,只是保存起来,待处理下一个字节时使用 nLeft = *pSrc;

}

else

{

// 组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节

*pDst = (*pSrc << (8-nChar)) | nLeft;

// 将该字节剩下的左边部分,作为残余数据保存起来

nLeft = *pSrc >> nChar;

// 修改目标串的指针和计数值 pDst++;

nDst++;

}

// 修改源串的指针和计数值

pSrc++; nSrc++;

}

// 返回目标串长度

return nDst;

}

// 7-bit解码

// pSrc: 源编码串指针

// pDst: 目标字符串指针

// nSrcLength: 源编码串长度

// 返回: 目标字符串长度

int gsmDecode7bit(const unsigned char* pSrc, char* pDst, int nSrcLength) {

int nSrc; // 源字符串的计数值

int nDst; // 目标解码串的计数值

int nByte; // 当前正在处理的组内字节的序号,范围是0-6 unsigned char nLeft; // 上一字节残余的数据

// 计数值初始化

nSrc = 0;

nDst = 0;

// 组内字节序号和残余数据初始化

nByte = 0;

nLeft = 0;

// 将源数据每7个字节分为一组,解压缩成8个字节

// 循环该处理过程,直至源数据被处理完

// 如果分组不到7字节,也能正确处理

while(nSrc<nSrcLength)

{

// 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节

*pDst = ((*pSrc << nByte) | nLeft) & 0x7f;

// 将该字节剩下的左边部分,作为残余数据保存起来

nLeft = *pSrc >> (7-nByte);

// 修改目标串的指针和计数值

pDst++;

nDst++;

// 修改字节计数值

nByte++;

// 到了一组的最后一个字节 if(nByte == 7)

{

// 额外得到一个目标解码字节 *pDst = nLeft;

// 修改目标串的指针和计数值 pDst++;

nDst++;

// 组内字节序号和残余数据初始化 nByte = 0;

nLeft = 0;

}

// 修改源串的指针和计数值 pSrc++;

nSrc++;

}

*pDst = 0;

// 返回目标串长度

return nDst;

}

短信系统中的 7bit 编码(c).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/279919.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)