2011-03-11 98 views
0

在查看一些代码的同时,我发现了一个函数,它似乎完全是bin2hex所做的。我测试了大量随机生成的输入,它们是相同的。我想知道的是,如果任何人都可以看到它们之间的任何区别。或者,也许有人可以给我一些关于bin2hex实施的信息。bin2hex的自定义实现

下面是函数我跟你说过:

function strToHex($str){ 
    $result=''; 
    $map = array(
     '0' => '00', 
     '1' => '01', 
     '2' => '02', 
     '3' => '03', 
     '4' => '04', 
     '5' => '05', 
     '6' => '06', 
     '7' => '07', 
     '8' => '08', 
     '9' => '09', 
     'a' => '0a', 
     'b' => '0b', 
     'c' => '0c', 
     'd' => '0d', 
     'e' => '0e', 
     'f' => '0f' 
    ); 

    for ($i=0; $i < strlen($str); $i++){ 
     $tmp = dechex(ord($str[$i])); 
     if(isset($map[$tmp])) 
      $tmp = $map[$tmp]; 
     $result .= $tmp; 
    } 

    return $result; 
} 

谢谢
阿林

回答

0

我不知道在PHP中的实施细节,但你可以看看这个JavaScript的函数(来自php.js),它相当于PHP bin2hex,但是用JS编写。

function bin2hex (s) { 
// http://kevin.vanzonneveld.net 
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
// + bugfixed by: Onno Marsman 
// + bugfixed by: Linuxworld 
// *  example 1: bin2hex('Kev'); 
// *  returns 1: '4b6576' 
// *  example 2: bin2hex(String.fromCharCode(0x00)); 
// *  returns 2: '00' 
var i, f = 0, 
    a = []; 

s += ''; 
f = s.length; 

for (i = 0; i < f; i++) { 
    a[i] = s.charCodeAt(i).toString(16).replace(/^([\da-f])$/, "0$1"); 
} 

return a.join(''); 

}

你可以看到原代码here

HTH!

+0

谢谢,这很有帮助! – 2011-03-16 06:01:52

+0

:)欢迎您 – SubniC 2011-03-16 08:37:23

+0

.replace在里面做什么?还有什么理由不只是连接成一个字符串,而不是把它放在一个数组中?我相信所有现代浏览器优化字符串连接(IE7我不相信,但除此之外的任何其他原因?) – Hoffmann 2014-06-30 16:13:25