首頁 > php教程 > php手册 > 主體

开扒php内核函数,第二篇 hex2bin

WBOY
發布: 2016-06-06 19:42:33
原創
1580 人瀏覽過

我们还是从分析开始吧 先看这个函数的介绍吧 string hex2bin ( string $data ) 如果输入的十六进制字符串是奇数长数或者无效的十六进制字符串将会抛出 E_WARNING 级别的错误。 先看个例子 ?php $hex = hex2bin(6578616d706c65206865782064617461); var_dump(

我们还是从分析开始吧

先看这个函数的介绍吧

string hex2bin ( string $data )

如果输入的十六进制字符串是奇数长数或者无效的十六进制字符串将会抛出 E_WARNING 级别的错误。

先看个例子

$hex = hex2bin("6578616d706c65206865782064617461");
var_dump($hex);
?>

以上例程的输出类似于:

string(16) "example hex data"
登入後複製

大家应该明白了吧

1,循环整个字符串

2,每两个16进制组成一个ascii字符 例如 65=》 0x6

3 ,输出结果

我是这样想的

开扒php内核函数,第二篇 hex2bin

因为上面要判断输入的字符串是否有效,所以加了一些判断,字符范围啊

还有一个关键点就是 为什么要减去 0 和87呢,因为要把16进制的字符转换为真实的数字,所以要减

但是上面的程序写得是有问题的,我是觉得可以优化的

看看php内核是怎样写的

开扒php内核函数,第二篇 hex2bin

我们可以看到,

1,作者没有使用high和low的两个变量,而是用str[i]代替去累加 注意作者是先移位,然后再加,我写的程序是一步到位,这也是一种技巧啊

2,还有一个地方就是j+=2,作者是用了两个j++去替代

3,加法用或运算去代替,比我们的快啊,什么情况可以用或运算呢,就是原始数的低位都是0,加上一个任何数,可以认为两个数进行异运算啦 例如 0xf0 | 0x0f = 0xff = 0xf0+0x0f 啦

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!