2011-03-11 197 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