开扒php内核函数,第二篇 hex2bin
从上一篇我们得知怎样把ascii变成16进制显示,这篇我们是怎样把16进制变成ascii显示
我们还是从分析开始吧
先看这个函数的介绍吧
string hex2bin ( string $data
)
如果输入的十六进制字符串是奇数长数或者无效的十六进制字符串将会抛出 E_WARNING
级别的错误。
先看个例子
<?php
$hex = hex2bin("6578616d706c65206865782064617461");
var_dump($hex);
?>
以上例程的输出类似于:
string(16) "example hex data"
大家应该明白了吧
1,循环整个字符串
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 啦
下一篇再见
开扒php内核函数,第二篇 hex2bin的更多相关文章
- 开扒php内核函数,第三篇 implode
一开始觉得implode挺容易实现,但是写着写着才发现是挺复杂的,不说啦 来看看implode的用法吧 <?php $arr = array('Hello','World!','Beautifu ...
- 开扒php内核函数,第一篇 bin2hex
这段时间真的比较有时间,所以自己用c写一下bin2hex啦 写个php的人都知道,这是个比较熟悉的函数吧,没有什么高深,只是把输入的东西以16进制输出吧了 先分析一下,这个函数要怎么写吧,他会有一定的 ...
- python之函数第二篇
一.名称空间与作用域 名称空间分类: 内置名称空间 import this dir(buil-in) 查看全部内置 全局名称空间 局部名称空间 在函数体内等 查询全局和局部 globals()方法可以 ...
- lua学习之深入函数第二篇
深入函数 2 非全局的函数 函数是第一类值,函数可以存储到全局变量,局部变量,table 字段中 lua 函数库中的大部分函数存储到 table 字段中 Lib = {} Lib.foo = func ...
- 深入理解javascript函数系列第二篇——函数参数
× 目录 [1]arguments [2]内部属性 [3]函数重载[4]参数传递 前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...
- javascript立即调用的函数表达式N种写法(第二篇)
原文:javascript立即调用的函数表达式N种写法(第二篇) 上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){}) ...
- 关于Linux系统调用,内核函数【转】
转自:http://blog.csdn.net/ubuntulover/article/details/5988220 早上听人说到某个程序的一部分是内核态,另一部分是用户态,需要怎么怎么.当时突然想 ...
- shell第二篇
第二篇知道shell是什么,再来了解一下shell的分类及相关历史 参考百度百科:shell 1.shell概念(计算机壳层) 在计算机科学中,Shell俗称壳(用来区别于核),是指"提供使 ...
- 第二篇 界面开发 (Android学习笔记)
第二篇 界面开发 第5章 探索界面UI元素 ●The Android View Class ●△Widget设计步骤 需要修改三个XML,以及一个class: 1)第一个xml是布局XML文件 ...
随机推荐
- 调bug的一点感悟
出错时一定要先看错误日志,要知道出什么错了,所以平常在可能出错的地方都要输出错误日志. 不要根据脑中的设想去调bug,时间久了就没有耐心,一烦躁起来,思维定势了,就越调不出来了. 所以一般半小时还找不 ...
- jquery 计算输入的文本的utf-8字节长度
jquery-2.1.1.min.js /*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license ...
- PHP 练习租房
练习:租房子 <body> <form action="test.php" method="post"> <div>区域: ...
- lcd ram/半反穿技术解析【转】
转自:http://bbs.meizu.cn/viewthread.php?tid=3058847&page=1 我的话题应该会比较长一些.但是大致板块如下:1.LCD RAM;-->此 ...
- C# Server.MapPath()
./当前目录 /网站主目录../上层目录~/网站虚拟目录 如果当前的网站目录为E:\wwwroot 应用程序虚拟目录为E:\wwwroot\company 浏览的页面路径为E:\wwwroot\ ...
- CF 314C Sereja and Subsequences(树状数组)
题目链接:http://codeforces.com/problemset/problem/314/C 题意:给定一个数列a.(1)写出a的不同的所有非下降子列:(2)定义某个子列的f值为数列中各个数 ...
- php实现新闻页面
首页 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- Order to Cash Process
order to cash process steps can be listed as below · Enter the Sales Order · Book the Sales Order · ...
- python实现简单kNN
注释写得很清楚了,熟悉了一下python的一些基本语法和numpy中的一些操作. from numpy import * import operator def createDataSet(): # ...
- 《OD大数据实战》Hive入门实例
官方参考文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual 一.命令行和客户端 1. 命令窗口 1)进入命令窗口 hi ...