轉貼 - 如何使用php实现asc、binary以及hex之间的互换 废话少说,我们直接进入代码: function asc2bin($str) { $text_array = explode("\r\n", chunk_split($str, 1)); for ($n = 0; $n < count($text_array) - 1; $n++) { $newstring .= substr("0000".base_convert(ord($text_array[$n]), 10, 2), -8); } $newstring = chunk_split($newstring, 8, " "); return $newstring; } function bin2asc($str) { $str = str_replace(" ", "", $str); $text_array = explode("\r\n", chunk_split($str, 8)); for ($n = 0; $n < count($text_array) - 1; $n++) { $newstring .= chr(base_convert($text_array[$n], 2, 10)); } return $newstring; } 以上两个函数是实现asc和binary之间的幻想转化的。 重点说几个函数吧。 其中的chunk_split函数的原型如下: string chunk_split(string string, int [chunklen] , string [end]); 函数描述: 本函数将字符串变成小段供其它函数使用。例如,base64_encode。内定是参数 chunklen (76 个字符) 每隔 76 个字符插入 end ("\r\n")。传回新字符串而不更动原字串。 举个简单的例子: <? $string=chunk_split("abcdefghijklmnopqrstuvwxyz",5); echo $string; ?> 将会显示如下格式的字符串: abcde fghij klmno pqrst uvwxy z 还有一个需要注意的是base_convert函数。它是一个数学函数。函数描述如下: string base_convert(string number, int frombase, int tobase); 本函式将数字字串 number 从以 frombase 进位转换到以 tobase 进位。本式能够处理的由以二进位到以三十六进位之间的进位方式。在十进位之前都是以数字表示,而在超过十进位之后就用英文字母表示。例如十六进位个位数依序为 123456789abcdef,10 的顺序是第十七个,这时才进一位。而三十六进位 a 是第十个、b 为第十一个、z 为第三十六个、10 是第三十七个,这时才进位。 弄懂了上面两个函数,我给出的转换函数相信大家也能看明白了。。。 我们接着看: function asc2hex($str) { return chunk_split(bin2hex($str), 2, " "); } function hex2asc($str) { $str = str_replace(" ", "", $str); for ($n=0; $n<strlen($str); $n+=2) { $newstring .= pack("C", hexdec(substr($str, $n, 2))); } return $newstring; } 以上实现了asc到十六进制之间的转换。第一个函数很简单,我就不多说了。第二个函数需要注意下面2个函数: string str_replace(string needle, string str, string haystack); 这个函数是将haystack字符串中的needle子串替换成str字符串。 pack函数在perl时代就是一个非常有用的函数,在php里虽然没有那么重要但是也不可小视的。 string pack(string format, mixed [args]...); 把一个列表或数组以在实际机器存贮格式或C等编程语言使用的格式转化(包装)到一个简单变量中。 具体用法大家可以参考perl或者php中的函数说明。 再来: function binary2hex($str) { $str = str_replace(" ", "", $str); $text_array = explode("\r\n", chunk_split($str, 8)); for ($n = 0; $n < count($text_array) - 1; $n++) { $newstring .= base_convert($text_array[$n], 2, 16); } $newstring = chunk_split($newstring, 2, " "); return $newstring; } function hex2binary($str) { $str = str_replace(" ", "", $str); $text_array = explode("\r\n", chunk_split($str, 2)); for ($n = 0; $n < count($text_array) - 1; $n++) { $newstring .= substr("0000".base_convert($text_array[$n], 16, 2), -8); } $newstring = chunk_split($newstring, 8, " "); return $newstring; } 上面两个是对一六进制和二进制之间的转换。大部分函数都讲过了。很简单。 看到这里,大家对php的柑橘而是什么呢?我想不只是强大可以形容吧。 需要完整代码的可以发email到:sqlinject@hotmail.com。 谢谢大家对s8s8的支持! |
|
来自: Ralf_Jones > 《开发资料》