php bcd码压缩-把十进制数字压缩到十六进制数据中
下面我们一起来看和篇关于php bcd码压缩-把十进制数字压缩到十六进制数据中实例,希望文章给各位同学带来帮助哦。
例,php bcd码压缩-把十进制数字压缩到十六进制数据中,代码如下:
<?php /* php bcd码压缩-把十进制数字压缩到十六进制数据中 例如 0091 压缩后 0x00 0x91 */ $string = '0091' ; $bytes = Bytes::getBytes( $string ); print_r( $bytes ); /* Array ( [0] => 48 [1] => 48 [2] => 57 [3] => 49 ) */ $asc =Bytes::AscToHex( $bytes ,4); //4位压缩成2位 print_r( $asc ); /* Array ( [0] => 0 [1] => 145 ) */ echo Bytes::toStr( $asc ); /* 0091 */ $hex =Bytes::HexToAsc( $asc ,2); //反操作2位还原成4位 print_r( $hex ); /* Array ( [0] => 48 [1] => 48 [2] => 57 [3] => 49 ) */ ?>例,把十进制数字压缩到十六进制数据中,代码如下:
<?php /** * php bcd码压缩 * 把十进制数字压缩到十六进制数据中 * @author phpff测试数据 * Created on 2011-7-15 */ class Bytes { /** * 转换一个String字符串为byte数组 * @param $str 需要转换的字符串 * @param $bytes 目标byte数组 * @author phpff测试数据 */ public static function getBytes( $string ) { $bytes = array (); for ( $i = 0; $i < strlen ( $string ); $i ++){ $bytes [] = ord( $string [ $i ]); } return $bytes ; } /** * 将字节数组转化为String类型的数据 * @param $bytes 字节数组 * @param $str 目标字符串 * @return 一个String类型的数据 */ public static function toStr( $bytes ) { $str = '' ; foreach ( $bytes as $ch ) { $str .= bin2hex( chr ( $ch )); } return $str ; } /** * asc码转成16进制数据 * @param $asc asc数字字符串 * @param $AscLen 需要转换的字符串长度 * @return 16进制数组 * @author phpff测试数据 */ public static function AscToHex( $asc , $AscLen ) { $i =0; $Hex = array (); for ( $i = 0; 2* $i < $AscLen ; $i ++) { /*A:0x41(0100 0001),a:0x61(0110 0001),右移4位后都是0001,加0x90等0xa*/ $Hex [ $i ] = ( chr ( $asc [2* $i ]) << 4); if (!( chr ( $asc [2* $i ]) >= '0' && chr ( $asc [2* $i ]) <= '9' )){ $Hex [ $i ] += 0x90; } if (2* $i +1 >= $AscLen ){ break ; } $Hex [ $i ] |= ( chr ( $asc [2* $i +1]) & 0x0f); if (!( chr ( $asc [2* $i +1]) >= '0' && chr ( $asc [2* $i +1]) <= '9' )){ $Hex [ $i ] += 0x09; } } return $Hex ; } /** * 将16进制的数据转换成asc码 * @param $Hex 16进制数组 * @param $HexLen 16进制数组长度 * @return asc数组 * @author phpff测试数据 */ public static function HexToAsc( $Hex , $HexLen ) { $i =0; $Temp =0; for ( $i = 0; $i < $HexLen ; $i ++ ) { $Temp = ( $Hex [ $i ] & 0xf0) >> 4; if ( $Temp < 10){ $Asc [2* $i ] = (0x30 + $Temp ); } else { $Asc [2* $i ] = (0x37 + $Temp ); } $Temp = $Hex [ $i ] & 0x0f; if ( $Temp < 10){ $Asc [2* $i +1] = (0x30 + $Temp ); } else { $Asc [2* $i +1] = (0x37 + $Temp ); } } return $Asc ; } } ?>查看更多关于php bcd码压缩-把十进制数字压缩到十六进制数据中的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did29928