php字符串和2进制互相转换

本文介绍了一种使用PHP实现字符串与二进制数据之间的相互转换的方法。通过两个自定义函数,可以将任意字符串转化为二进制表示,并能逆向操作将其还原回原始字符串。这种方法适用于需要对数据进行底层操作的场景。
第一种:
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);
}

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 bintostr(strtobin('hello, 你好啊!'));
第二种方法:
function str2bin($str = ''){
    $bin_arr = array();
    $str_arr = preg_split('//u', $str, 0, PREG_SPLIT_NO_EMPTY);
    foreach ($str_arr as $val) {
        if (ord($val) > 127) {
            $bin_arr[] = base_convert(str_replace('%', '', urlencode($val)), 16, 2);
        } else {
            $bin_arr[] = decbin(ord($val));
        }
    }
    return implode(' ', $bin_arr);
}

function bin2str($bin_str = ''){
    $str = '';
    $bin_str = explode(' ', $bin_str);
    foreach ($bin_str as $val) {
        if (bindec($val) < 127) {
            $str .= chr(bindec($val));
        } else {
            $str .= urldecode('%' . implode('%', str_split(base_convert($val, 2, 16), 2)));
        }
    }
    return $str;
}
echo bin2str(str2bin('hello, 你好啊!'));

223916_bL9y_2663968.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值