Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重用str_split()的值_Php - Fatal编程技术网

Php 重用str_split()的值

Php 重用str_split()的值,php,Php,我有一个很长的数字字符串,我想把它们分成长度为8的块,然后从这个ascii数字中提取它们的字符 当我在str_split$string之后使用bindec时,它给了我错误的值。 我不知道问题出在哪里,因为str_split正确地分割了字符串 $key = '101101011'; numbersToletters($key); function numbersToletters($string) { $pool = str_split($string, 8); for($i =

我有一个很长的数字字符串,我想把它们分成长度为8的块,然后从这个ascii数字中提取它们的字符

当我在str_split$string之后使用bindec时,它给了我错误的值。 我不知道问题出在哪里,因为str_split正确地分割了字符串

$key = '101101011';
numbersToletters($key);

function numbersToletters($string) {
    $pool = str_split($string, 8);
    for($i = 0; $i < count($pool); $i++) {
        $bin = $pool[$i];
        $n = bindec($bin);
        echo chr($n) . "<br>";
    }
}
我从bindec'101101011'接收的输出是81,而它是363,应该返回k

例如,这是有效的

$number = bindec($key);
echo $number;
echo "<br>".chr($number) ."<br>";
删除对chr函数的调用:

$key = '0011010000101101101101011010100000011101110110111001000000000100';
numbersToletters($key);

function numbersToletters($string) {
    $pool = str_split($string, 8);
    for($i = 0; $i < count($pool); $i++) {
        $bin = $pool[$i];
        $n = bindec($bin);
        echo $n . "<br>";
    }
}

我尝试了你的代码,没有任何错误。Var_dump显示真实值,我用头翻译以确保

array (size=8)
0 => string '00110100' (length=8)
1 => string '00101101' (length=8)
2 => string '10110101' (length=8)
3 => string '10101000' (length=8)
4 => string '00011101' (length=8)
5 => string '11011011' (length=8)
6 => string '10010000' (length=8)
7 => string '00000100' (length=8)

52
45
181
168
29
219
144
4
查看


您期望的输出是什么?您得到的错误值是什么?可能只是chr$n上缺少utf8_编码?只是猜测而不知道预期的valueschr函数只返回一个字符。也许这就是问题所在?bindec'101011';是363。但在代码中,$key中有9个字符,所以取前8个bindec'10110101';那是181。你从哪里弄来的81?这里是问题char do no problem这个返回为following 52是对的45是对的81是错的假设是二进制101101011是363所以如下数字101010001给出=>68错误0001101给出=>29正确110112给出=>19错误为什么你突然使用9个位置363的二进制数什么地方都没有?
    $key = '0011010000101101101101011010100000011101110110111001000000000100';
    $pool = str_split($key,8);

    var_dump($pool);

    for($i = 0 ;$i < count($pool) ; $i++)
    {
        $n= bindec($pool[$i]);
        var_dump($n);
        echo chr($n) . "<br>";
    }