在現(xiàn)在的項目中,需要用php去解碼7bit的傳輸編碼, 本來想從網(wǎng)上找個現(xiàn)成的直接用, 沒找到, 參考了大神的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 = ""; //當前循環(huán)應該處理的字符串
$str_la = ""; //上一個循環(huán)中遺留的字符串(補位的字符串給還回去)
$key_move = 1; //偏移量 取值范圍(1-7)
foreach($str_src as $item){
$item = base_convert($item,16,2); //16進制轉(zhuǎn)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編碼傳進去就好了. 歡迎留言討論.~