在PHP中将字符串转换为字节数组/二进制数组

6
在PHP中,如何将字符串转换为二进制数组?
4个回答

4

我认为你在寻找类似于Perl pack/unpack函数的等效函数。如果是这种情况,我建议你查看PHP的pack/unpack函数:


2

假设您想将$stringA="Hello"转换为二进制。

首先使用ord()函数获取第一个字符。这将给出字符的ASCII值,该值为十进制。在本例中,它是72。

现在使用dec2bin()函数将其转换为二进制。 然后使用下一个函数。 您可以在http://www.php.net找到这些函数的工作方式。

或者使用以下代码:

<?php
    // Call the function like this: asc2bin("text to convert");
    function asc2bin($string)
    {
        $result = '';
        $len = strlen($string);
        for ($i = 0; $i < $len; $i++)
        {
            $result .= sprintf("%08b", ord($string{$i}));
        }
        return $result;
    }

    // If you want to test it remove the comments
    //$test=asc2bin("Hello world");
    //echo "Hello world ascii2bin conversion =".$test."<br/>";
    //call the function like this: bin2ascii($variableWhoHoldsTheBinary)
    function bin2ascii($bin)
    {
        $result = '';
        $len = strlen($bin);
        for ($i = 0; $i < $len; $i += 8)
        {
            $result .= chr(bindec(substr($bin, $i, 8)));
        }
        return $result;
    }
    // If you want to test it remove the comments
    //$backAgain=bin2ascii($test);
    //echo "Back again with bin2ascii() =".$backAgain;
?>

1

在PHP中不存在二进制数组这样的东西。所有需要字节流操作的函数都是基于字符串的。你具体想要做什么?


1
如果您想访问字符串的特定部分,可以像处理数组一样对待它。
$foo = 'bar';
echo $foo[0];

输出:b


2
对于这种字符串访问,我认为花括号表示法更可取(否则你会冒着让其他维护你的代码的人困惑不解的风险)。例如:$foo{0} - EvanK
1
除非我错了,否则在 PHP 6 中,花括号表示法已经被弃用。 - McAden
1
啊,这里就是:http://us.php.net/language.types.string在“按字符访问和修改字符串”标题下的“注意”部分。 - McAden
1
@EvanK:对于任何类型的访问,我认为方括号表示法更可取(否则你会冒着让其他维护你的代码的人困惑不解的风险)。例如,避免使用:$foo {0}。 - o0'.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接