開扒php內核函數,第二篇 hex2bin

從上一篇咱們得知怎樣把ascii變成16進制顯示,這篇咱們是怎樣把16進制變成ascii顯示php

咱們仍是從分析開始吧函數

先看這個函數的介紹吧優化

string hex2bin ( string $data )code

若是輸入的十六進制字符串是奇數長數或者無效的十六進制字符串將會拋出 E_WARNING 級別的錯誤。blog

先看個例子ci

<?php
$hex = hex2bin("6578616d706c65206865782064617461");
var_dump($hex);
?>字符串

以上例程的輸出相似於:get

string(16) "example hex data"

你們應該明白了吧string

1,循環整個字符串it

2,每兩個16進制組成一個ascii字符 例如 65=》 0x6<<4+5 =  e

3 ,輸出結果

我是這樣想的

image

由於上面要判斷輸入的字符串是否有效,因此加了一些判斷,字符範圍啊

還有一個關鍵點就是 爲何要減去 0 和87呢,由於要把16進制的字符轉換爲真實的數字,因此要減

可是上面的程序寫得是有問題的,我是以爲能夠優化的

看看php內核是怎樣寫的

image

咱們能夠看到,

1,做者沒有使用high和low的兩個變量,而是用str[i]代替去累加 注意做者是先移位,而後再加,我寫的程序是一步到位,這也是一種技巧啊

2,還有一個地方就是j+=2,做者是用了兩個j++去替代

3,加法用或運算去代替,比咱們的快啊,什麼狀況能夠用或運算呢,就是原始數的低位都是0,加上一個任何數,能夠認爲兩個數進行異運算啦 例如 0xf0 | 0x0f = 0xff = 0xf0+0x0f 啦

下一篇再見

相關文章
相關標籤/搜索