php字符串(含中文)转二进制串代码

<?php
header("charset=utf-8;");
function StrToBin($str){
    $arr = preg_split('/(?<!^)(?!$)/u', $str);
    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 BinToStr('1100001 1100001 1100001 1100011 1100011 1100011 111001011010010010101001 111001111010100110111010');

代码解释:

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

'/(?<!^)(?!$)/u'是匹配随意一个字符的正则表达式, 例如一个字母, 一个数字, 一个符号, 一个汉字等等, 具体想了解这个正则, 请百度"正则 断言"

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位的二进制串补全

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值