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

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

我们还是从分析开始吧

先看这个函数的介绍吧

string hex2bin ( string $data )

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

先看个例子

以上例程的输出类似于: string(16) "example hex data"

大家应该明白了吧

1,循环整个字符串

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

3 ,输出结果

我是这样想的

test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fblog%2F321026%2F201503%2F191350257825824.png&refer=http%3A%2F%2Fwww.cnblogs.com%2Fsimonlu%2Fp%2F4350207.html

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

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

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

看看php内核是怎样写的

test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fblog%2F321026%2F201503%2F191350288923841.png&refer=http%3A%2F%2Fwww.cnblogs.com%2Fsimonlu%2Fp%2F4350207.html

我们可以看到,

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

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

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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值