> 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 학습자의 빠른 성장을 도와주세요!