从上一篇咱们得知怎样把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 ,输出结果
我是这样想的
由于上面要判断输入的字符串是否有效,因此加了一些判断,字符范围啊
还有一个关键点就是 为何要减去 0 和87呢,由于要把16进制的字符转换为真实的数字,因此要减
可是上面的程序写得是有问题的,我是以为能够优化的
看看php内核是怎样写的
咱们能够看到,
1,做者没有使用high和low的两个变量,而是用str[i]代替去累加 注意做者是先移位,而后再加,我写的程序是一步到位,这也是一种技巧啊
2,还有一个地方就是j+=2,做者是用了两个j++去替代
3,加法用或运算去代替,比咱们的快啊,什么状况能够用或运算呢,就是原始数的低位都是0,加上一个任何数,能够认为两个数进行异运算啦 例如 0xf0 | 0x0f = 0xff = 0xf0+0x0f 啦
下一篇再见