- <?php
- /*
- 用途: 二进制数据 转 字符串
- 用来传输文件等二进制数据时编码
- base64_encode 的另外一个解决方法。
- 作者: Heyond
- 时间: 2008-7-31
- 备注: 转载无须注明出处
- 原理: 将一个字节,也就是8位,拆分为高四位一个字节,低四位一个字节,然后分别映射到 0123456789ABCDEF 中的某一个字符。
- */
- function tobyte($c) {
- $i = ord($c) - 48;
- $i -= $i > 9 ? 7 : 0;
- return $i;
- }
- function tochar($int) {
- return chr($int + ($int > 9 ? 57 : 48));
- }
- function hex_decode($s) {
- $r = '';
- $l = strlen($s);
- for($i=0; $i<$l; $i=$i+2) {
- $r .= chr(tobyte($s[$i]) << 4 | tobyte($s[$i+1]));
- }
- return $r;
- }
- function hex_encode($s) {
- $r = '';
- $high = bindec('11110000'); //note 取高四位
- $low = bindec('00001111'); //note 取低四位
- $l = strlen($s);
- for($i=0; $i<$l; $i++) {
- $k = ord($s[$i]);
- $r .= tochar(($k & $high) >> 4);
- $r .= tochar($k & $low);
- }
- return $r;
- }
- echo $s = hex_encode('This');
- echo hex_decode($s);
复制代码
|