如何将字符串来回转换为二进制

时间:2015-11-18 23:05:47

标签: php string binary

我需要能够将字符串转换为二进制部分。说我有字符串:

"R!Testing"

我想要一个函数来返回相应的二进制文件:

"010100100010000101010100011001010111001101110100011010010110111001100111"

并且还有另一个函数也可以在字符串"R!Testing"中转换该二进制文件。目前我正在使用以下内容。

function messageToBinary($message) {
    $value = unpack('H*', $message);
    return base_convert($value[1], 16, 2);
}
// Turn string of bits into its text equivalent
function binaryToMessage($binary) {
    return pack('H*', base_convert($binary, 2, 16));
}

这当然有几个问题我相信。有些字符失败(我认为因为16是最大值?)要正确转换,而且由于溢出问题,base_convert有时会因大字符串而失败。

什么是更好的方法?

1 个答案:

答案 0 :(得分:1)

在循环中进行,而不是试图将整个事物视为一个大数字。 ord()返回字符的字符代码,sprintf()可用于将其转换为固定长度的二进制数。

function messageToBinary($message) {
    $len = strlen($message);
    $result = '';
    for ($i = 0; $i < $len; $i++) {

        $result .= sprintf("%08b", ord($message[$i]));
    }
    return $result;
}

换句话说,提取字符串的8位段,将它们从二进制转换为十进制,然后使用chr()将其转换为字符。

function binaryToMessage($binary) {
    $len = strlen($binary);
    $result = '';
    for ($i = 0; $i < $len; $i += 8) {
        $n = substr($binary, $i, 8);
        $result .= chr(bindec($n));
    }
    return $result;
}

请注意,这仅适用于8位字符。对于Unicode,您需要变得更复杂。