c# PDU 7bit解码

c# PDU 7bit解码

作者:fly 发布于:2014-7-1 15:07 分类:嵌入式

本文出自 www.forwhat.cn

 

  //7bit解码
        int gsmDecode7bit(byte[] pSrc, byte[] pDst, int nSrcLength)
        {
            int nSrc;        // 源字符串的计数值
            int nDst;        // 目标解码串的计数值
            int nByte;       // 当前正在处理的组内字节的序号,范围是0-6
            byte nLeft;    // 上一字节残余的数据
            
            // 计数值初始化
            nSrc = 0;
            nDst = 0;
            
            // 组内字节序号和残余数据初始化
            nByte = 0;
            nLeft = 0;
            
            // 将源数据每7个字节分为一组,解压缩成8个字节
            // 循环该处理过程,直至源数据被处理完
            // 如果分组不到7字节,也能正确处理
            while(nSrc<nSrcLength)
            {
                // 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节
                pDst[nDst] = (byte)(((pSrc[nSrc] << nByte) | nLeft) & 0x7f);
                // 将该字节剩下的左边部分,作为残余数据保存起来
                nLeft = (byte)(pSrc[nSrc] >> (7-nByte));
            
                // 修改目标串的指针和计数值
                nDst++;
            
                // 修改字节计数值
                nByte++;
            
                // 到了一组的最后一个字节
                if(nByte == 7)
                {
                    // 额外得到一个目标解码字节
                    pDst[nDst] = nLeft;
            
                    // 修改目标串的指针和计数值
                    
                    nDst++;
            
                    // 组内字节序号和残余数据初始化
                    nByte = 0;
                    nLeft = 0;
                }
            
                // 修改源串的指针和计数值
                
                nSrc++;
            }
            
            //pDst[nDst] = 0;
            
            // 返回目标串长度
            return nDst;
        }

 

发表评论:

 
Powered by emlog sitemap