php专区

 首页 > php专区 > PHP应用 > 常用功能 > php bcd码压缩-把十进制数字压缩到十六进制数据中

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

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

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

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

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

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

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

  1. /**  
  2.  
  3. * php bcd码压缩  
  4.  
  5. * 把十进制数字压缩到十六进制数据中  
  6.  
  7. * @author phpff.com  
  8.  
  9. * Created on 2011-7-15  
  10.  
  11. */ 
  12. class Bytes {  
  13.      
  14. /**  
  15.       
  16. * 转换一个String字符串为byte数组  
  17.       
  18. * @param $str 需要转换的字符串  
  19.       
  20. * @param $bytes 目标byte数组  
  21.       
  22. * @author phpff.com  
  23.       
  24. */ 
  25.     public static function getBytes($string) {  
  26.    
  27.         $bytes = array();  
  28.         for($i = 0; $i < strlen($string); $i++){  
  29.              $bytes[] = ord($string[$i]);  
  30.         }  
  31.         return $bytes;  
  32.     }  
  33.    
  34.      
  35. /**  
  36.       
  37. * 将字节数组转化为String类型的数据  
  38.       
  39. * @param $bytes 字节数组  
  40.       
  41. * @param $str 目标字符串  
  42.       
  43. * @return 一个String类型的数据  
  44.       
  45. */ 
  46.    
  47.     public static function toStr($bytes) {  
  48.         $str = '';  
  49.         foreach($bytes as $ch) {  
  50.             $str .= bin2hex(chr($ch));  
  51.         }  
  52.    
  53.            return $str;  
  54.     }  
  55.    
  56.      
  57. /**  
  58.       
  59. * asc码转成16进制数据  
  60.       
  61. * @param $asc asc数字字符串  
  62.       
  63. * @param $AscLen 需要转换的字符串长度  
  64.       
  65. * @return 16进制数组  
  66.       
  67. * @author  phpff.com  
  68.       
  69. */ 
  70.      public static function AscToHex( $asc$AscLen) {  
  71.         $i=0;  
  72.         $Hex=array();  
  73.         for($i = 0; 2*$i < $AscLen$i++)  
  74.         {  
  75.              
  76. /*A:0x41(0100 0001),a:0x61(0110 0001),右移4位后都是0001,加0x90等0xa*/ 
  77.             $Hex[$i] =  (chr($asc[2*$i]) << 4);  
  78.             if (!(chr($asc[2*$i]) >= '0' && chr($asc[2*$i]) <= '9' )){  
  79.                 $Hex[$i] +=  0x90;  
  80.             }  
  81.    
  82.             if(2*$i+1 >= $AscLen){  
  83.                 break;  
  84.             }  
  85.    
  86.             $Hex[$i] |= (chr($asc[2*$i+1]) & 0x0f);  
  87.             if (!(chr($asc[2*$i+1]) >= '0' && chr($asc[2*$i+1]) <= '9' )){  
  88.                 $Hex[$i] += 0x09;  
  89.             }  
  90.    
  91.         }  
  92.         return $Hex;  
  93.     }  
  94.       
  95. /**  
  96.       
  97. * 将16进制的数据转换成asc码  
  98.       
  99. * @param $Hex 16进制数组  
  100.       
  101. * @param $HexLen 16进制数组长度  
  102.       
  103. * @return asc数组  
  104.       
  105. * @author  phpff.com  
  106.       
  107. */ 
  108.     public static function HexToAsc($Hex$HexLen) {  
  109.         $i=0;  
  110.         $Temp=0;  
  111.         for($i = 0; $i < $HexLen$i++ )  
  112.         {  
  113.             $Temp = ($Hex[$i] & 0xf0) >> 4;  
  114.             if ($Temp < 10){  
  115.                 $Asc[2*$i] =  (0x30 + $Temp);  
  116.             }else{  
  117.                 $Asc[2*$i] =   (0x37 + $Temp);  
  118.             }  
  119.    
  120.             $Temp = $Hex[$i] & 0x0f;  
  121.             if ($Temp < 10){  
  122.                 $Asc[2*$i+1] = (0x30 + $Temp);  
  123.             }else{  
  124.                 $Asc[2*$i+1] =  (0x37 + $Temp);  
  125.             }  
  126.    
  127.         }  
  128.         return $Asc;  
  129.     }  
  130.    
  131. }  
  132. ?>
分享到:
PHP 和 COM - php高级应用
PHP 和 COM PHP 可以操作 Win32 平台下的 COM 和 DCOM 对象  1.我创建了一个DLL来计算一些东西. 有什么方法可以在 PHP 下运行这个DLL吗 ?  你不能在PHP里操作简单的DLL.如果这个DLL包含COM 服务器并实现了 IDispatch 接口,你可以操作它.  2.&#039;Unsupported variant type: xxxx (0...
php ajax实现无刷新获取天气状态 - php高...
php ajax实现无刷新获取天气状态 首先我们要明白一点我们自己是无法来做天气预报这种功能的,这里我们只要调用api接口返回的数据就可以了,下面是以中国天气网的api接口调用实例我们一起来学习,天气已经成为生活中不可缺少的话题,与我们的生活有着密切的关系,我博客右边就用php+ajax做了一个天...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……