分享

如何使用php实现asc、binary以及hex之间的互换

 Ralf_Jones 2006-08-29
轉貼 - 如何使用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的支持!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多