当前位置:首页 > PHP教程 > php高级应用 > 列表

php bcd码压缩-把十进制数字压缩到十六进制数据中

发布:smiling 来源: PHP粉丝网  添加日期:2014-01-12 09:58:08 浏览: 评论:0 

下面我们一起来看和篇关于php bcd码压缩-把十进制数字压缩到十六进制数据中实例,希望文章给各位同学带来帮助哦。

例,php bcd码压缩-把十进制数字压缩到十六进制数据中,代码如下:

  1. <?php  
  2. /*  
  3. php bcd码压缩-把十进制数字压缩到十六进制数据中  
  4. 例如 0091 压缩后 0x00 0x91  
  5. */ 
  6. $string = '0091';  
  7. $bytes = Bytes::getBytes($string);  
  8. print_r($bytes);  
  9. /*  
  10. Array  
  11.  
  12.      
  13. [0] => 48  
  14.      
  15. [1] => 48  
  16.      
  17. [2] => 57  
  18.      
  19. [3] => 49  
  20.  
  21. */ 
  22. $asc=Bytes::AscToHex($bytes,4); 
  23. //4位压缩成2位  
  24. print_r($asc);  
  25. /*  
  26. Array  
  27.  
  28.      
  29. [0] => 0  
  30.      
  31. [1] => 145  
  32.  
  33. */ 
  34. echo Bytes::toStr($asc);  
  35. /*  
  36. 0091  
  37. */ 
  38. $hex=Bytes::HexToAsc($asc,2); 
  39. //反操作2位还原成4位  
  40. print_r($hex);  
  41. /*  
  42. Array  
  43.  
  44.      
  45. [0] => 48  
  46.      
  47. [1] => 48  
  48.      
  49. [2] => 57  
  50.      
  51. [3] => 49  
  52.  
  53. */ 
  54. ?> 

例,把十进制数字压缩到十六进制数据中,代码如下:

  1. <?php  
  2. /**  
  3.  
  4. * php bcd码压缩  
  5.  
  6. * 把十进制数字压缩到十六进制数据中  
  7.  
  8. * @author phpff.com  
  9.  
  10. * Created on 2011-7-15  
  11.  
  12. */ 
  13. class Bytes {  
  14.      
  15. /**  
  16.       
  17. * 转换一个String字符串为byte数组  
  18.       
  19. * @param $str 需要转换的字符串  
  20.       
  21. * @param $bytes 目标byte数组  
  22.       
  23. * @author phpff.com  
  24.       
  25. */ 
  26.     public static function getBytes($string) {  
  27.    
  28.         $bytes = array();  
  29.         for($i = 0; $i < strlen($string); $i++){  
  30.              $bytes[] = ord($string[$i]);  
  31.         }  
  32.         return $bytes;  
  33.     }  
  34.    
  35.      
  36. /**  
  37.       
  38. * 将字节数组转化为String类型的数据  
  39.       
  40. * @param $bytes 字节数组  
  41.       
  42. * @param $str 目标字符串  
  43.       
  44. * @return 一个String类型的数据  
  45.       
  46. */ 
  47.    
  48.     public static function toStr($bytes) {  
  49.         $str = '';  
  50.         foreach($bytes as $ch) {  
  51.             $str .= bin2hex(chr($ch));  
  52.         }  
  53.    
  54.            return $str;  
  55.     }  
  56.    
  57.      
  58. /**  
  59.       
  60. * asc码转成16进制数据  
  61.       
  62. * @param $asc asc数字字符串  
  63.       
  64. * @param $AscLen 需要转换的字符串长度  
  65.       
  66. * @return 16进制数组  
  67.       
  68. * @author  phpff.com  
  69.       
  70. */ 
  71.      public static function AscToHex( $asc$AscLen) {  
  72.         $i=0;  
  73.         $Hex=array();  
  74.         for($i = 0; 2*$i < $AscLen$i++)  
  75.         {  
  76.              
  77. /*A:0x41(0100 0001),a:0x61(0110 0001),右移4位后都是0001,加0x90等0xa*/ 
  78.             $Hex[$i] =  (chr($asc[2*$i]) << 4);  
  79.             if (!(chr($asc[2*$i]) >= '0' && chr($asc[2*$i]) <= '9' )){  
  80.                 $Hex[$i] +=  0x90;  
  81.             }  
  82.    
  83.             if(2*$i+1 >= $AscLen){  
  84.                 break;  
  85.             }  
  86.    
  87.             $Hex[$i] |= (chr($asc[2*$i+1]) & 0x0f);  
  88.             if (!(chr($asc[2*$i+1]) >= '0' && chr($asc[2*$i+1]) <= '9' )){  
  89.                 $Hex[$i] += 0x09;  
  90.             }  
  91.    
  92.         }  
  93.         return $Hex;  
  94.     }  
  95.       
  96. /**  
  97.       
  98. * 将16进制的数据转换成asc码  
  99.       
  100. * @param $Hex 16进制数组  
  101.       
  102. * @param $HexLen 16进制数组长度  
  103.       
  104. * @return asc数组  
  105.       
  106. * @author  phpff.com  
  107.       
  108. */ 
  109.     public static function HexToAsc($Hex$HexLen) {  
  110.         $i=0;  
  111.         $Temp=0;  
  112.         for($i = 0; $i < $HexLen$i++ )  
  113.         {  
  114.             $Temp = ($Hex[$i] & 0xf0) >> 4;  
  115.             if ($Temp < 10){  
  116.                 $Asc[2*$i] =  (0x30 + $Temp);  
  117.             }else{  
  118.                 $Asc[2*$i] =   (0x37 + $Temp);  
  119.             }  
  120.    
  121.             $Temp = $Hex[$i] & 0x0f;  
  122.             if ($Temp < 10){  
  123.                 $Asc[2*$i+1] = (0x30 + $Temp);  
  124.             }else{  
  125.                 $Asc[2*$i+1] =  (0x37 + $Temp);  
  126.             }  
  127.    
  128.         }  
  129.         return $Asc;  
  130.     }  
  131.    
  132. }  
  133. ?>

Tags: 压缩 十进制 数字

分享到: