php处理GSM 短信中的7bit压缩传输解码

在现在的项目中,需要用php去解码7bit的传输编码, 本来想从网上找个现成的直接用, 没找到, 参考了大神的C++解码方法, 换成了php的. 需要的请拿走.

//GSM 短信中的7bit压缩传输解码
private  function decode_7bit($str){
    if(strlen($str) < 2) return false;
    $str_src = str_split($str,2); //以两个字符为单位分割
    $str_build = ""; //最终输出的字符串
    $str_cu = "";   //当前循环应该处理的字符串
    $str_la = "";   //上一个循环中遗留的字符串(补位的字符串给还回去)
    $key_move = 1;  //偏移量 取值范围(1-7)
    foreach($str_src as $item){
        $item = base_convert($item,16,2); //16进制转2进制
        $pre = ""; //补0位
        if(strlen($item) < 8){  //未满8位的 前面补0 补够8位
            for($i=0;$i<(8-strlen($item));$i++){
                $pre .= "0";
            }
        }
        $item = $pre . $item; //拼接完成满8位的二进制串
        $str_cu = substr($item,$key_move); //截取当前计算位
        if($str_la != "") $str_cu .= $str_la;
        $str_la = substr($item,0,$key_move); //截取遗留位
        $str_cu = "0".$str_cu; //前面补0 ,7位补8位 不是必须的
        $str_build .= chr(base_convert($str_cu,2,10));

        if(strlen($str_la) == 7){
            $str_build .=  chr(base_convert("0".$str_la,2,10));
            $str_la = "";   //遗留位清空
            $key_move = 1;  //偏移量归1
        }else{
            $key_move++;
        }
    }
    return $str_build;
}

直接把你的7bit编码传进去就好了. 欢迎留言讨论.~

你可能感兴趣的:(php处理GSM 短信中的7bit压缩传输解码)