首页 > php教程 > php手册 > 正文

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

WBOY
发布: 2016-06-06 19:42:33
原创
1610 人浏览过

我们还是从分析开始吧 先看这个函数的介绍吧 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
最新问题
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板