<?php /** * 将字符串转换成二进制 * @param type $str * @return type */ function StrToBin($str){ //1.列出每个字符 $arr = preg_split('/(?<!^)(?!$)/u', $str); //2.unpack字符 foreach($arr as &$v){ $temp = unpack('H*', $v); $v = base_convert($temp[1], 16, 2); unset($temp); } return join(' ',$arr); } /** * 将二进制转换成字符串 * @param type $str * @return type */ function BinToStr($str){ $arr = explode(' ', $str); foreach($arr as &$v){ $v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16)); } return join('', $arr); } echo StrToBin("余景波Esan"); echo "<br />"; echo BinToStr("111001001011110110011001 111001101001100110101111 111001101011001110100010 1000101 1110011 1100001 1101110");
输出:
111001001011110110011001 111001101001100110101111 111001101011001110100010 1000101 1110011 1100001 1101110
余景波Esan
由于utf-8编码下一个中文字符是占3个字节的,一个字节又是8位,所以转出来的一个汉字就是连续的24个0和1的组合.每个字符是用空格分开的,英文字符是占一个字节,正好是8位,所以Esan就被转换成4组8位的01组合.有意思吧.