php还原二进制为中文,PHP字符串(含中文)转二进制串代码

这段代码展示了如何在PHP中将包含中文的字符串转换为二进制串以及反过来的过程。使用了preg_split、unpack、base_convert等函数,确保了中文字符的完整转换,并在转换过程中处理了不足8位的二进制串,将其补全到8位。
摘要由CSDN通过智能技术生成

二进制转换,PHP字符串(含中文)转二进制串代码

function StrToBin($str){

$arr = preg_split('/(?

foreach($arr as &$v){

$temp = unpack('H*', $v);

$v = base_convert($temp[1], 16, 2);

while($v<8)$v='0'.$v;

unset($temp);

}

return join(' ',$arr);

}

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("织梦先生");

echo '
';

echo BinToStr('111001101001110010001001 111001001011100010000000 111010011010001010010111 111001111000100110011011 111010011000000010111100 111001111001101010000100 111001011011111110000011 111011111011110010001100 111001001011110110100000 111001011011000010110001 111001011000111110101111 111001001011101110100101 111001111000100110011011 111010011000000010111100 111001001011101010001110 111001011010010010101001 111001001011100010001011 111011111011110010000001');

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

functionStrToBin($str){

$arr=preg_split('/(?

foreach($arras&$v){

$temp=unpack('H*',$v);

$v=base_convert($temp[1],16,2);

while($v<8)$v='0'.$v;

unset($temp);

}

returnjoin(' ',$arr);

}

functionBinToStr($str){

$arr=explode(' ',$str);

foreach($arras&$v){

$v=pack("H".strlen(base_convert($v,2,16)),base_convert($v,2,16));

}

returnjoin('',$arr);

}

echoStrToBin("织梦先生");

echo'
';

echoBinToStr('111001101001110010001001 111001001011100010000000 111010011010001010010111 111001111000100110011011 111010011000000010111100 111001111001101010000100 111001011011111110000011 111011111011110010001100 111001001011110110100000 111001011011000010110001 111001011000111110101111 111001001011101110100101 111001111000100110011011 111010011000000010111100 111001001011101010001110 111001011010010010101001 111001001011100010001011 111011111011110010000001');

代码解释:

preg_split是php正则匹配并切割字符串的函数, 接收两个参数, 第一个参数是正则表达式, 第二个参数是要切割的字符串, 详情请自己翻手册

‘/(?

unpack则是把一个字符变成一段进制码, 具体看unpack的第一个参数, 这里是’H'代表16进制, 还有其他的参数, 自行翻手册, 其中手册没有说明’H'后面的*是什么意思, 它表示的是转换所有, 如果填’H2′表示转换2个, 如果一个汉字转16进制是三个字节6位16进制码, ‘H2′则只转换前两位16进制, ‘H*’表示都转换

base_convert这个函数估计都可以从英文意思知道了, 就是进制转换的意思, 我这里是把2进制和16进制转换, 其中要注意的是, 16进制转2进制后, 如果其二进制不足八位, 其不会在前面加0, 比如a的16进制是61, 二进制是0110 0001, 转换后2进制的字符串就变成了110 0001而丢了开头的0, 但是16进制的不会, 比如\n的16进制是0A, 他不会丢了前面的0, 因此我在第8行用while来把不够8位的二进制串补全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值