为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 PHP 中连接多个字节

如何在 PHP 中连接多个字节

PHP
互换的青春 2023-09-15 17:46:16
我在php.net和这里的自学到目前为止还没有让我找到任何方法!我不想在这里展示我对像&and >>or 这样的运算符的实验- 太尴尬了!<<起点是具有整数值(始终为 8 位)的不同长度的数组。例如:[178, 89, 1]它们的二进制编码等效...10110010, 01011001, 00000001应该是,最低有效位在前,...01001101, 10011010, 10000000连接:010011011001101010000000有人可以一步步向我解释该过程,以便我理解php中的位操作吗?谢谢后记:我不想用字符串操作来解决问题(我可以这样做 - 但它非常慢!),而是用位操作来解决。
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

使用decbin()但你需要0向左填充,否则000000011再次变成。

一种方法是使用array_reduce(),尽管您可以通过多种方式循环数组。

<?php

$array = [178, 89, 1];


echo array_reduce($array, function ($acc, $byte) {

   return $acc.strrev(str_pad(decbin($byte), 8, 0, STR_PAD_LEFT));

})

结果:010011011001101010000000

https://3v4l.org/D4qGr


查看完整回答
反对 回复 2023-09-15
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

也许你需要这样的东西:


<?php

$array = [178, 89, 1];


$output = 0;

foreach ($array as $v) {

    for ($i = 0; $i < 8; $i++) {

        $output = ($output << 1) | ($v & 1);

        $v = $v >> 1;

    }

}


echo $output . " " . str_pad(decbin($output), 24, 0, STR_PAD_LEFT);

现在一步一步:

  1. 对于输入数组中的每个元素,我们得到第 0 位(不太重要)-$v & 1

  2. 输出变量左移以为该位提供空间$output << 1

  3. |位被设置到输出变量部分的最右边的位置

  4. 我们将变量向右移动,因此第 1 位变为 0

  5. 重复其余部分


查看完整回答
反对 回复 2023-09-15
?
翻阅古今

TA贡献1780条经验 获得超5个赞

<?php

function dec2bin_i($decimal_i)

{

 bcscale(0);


 $binary_i = '';

 do

  {

   $binary_i = bcmod($decimal_i,'2') . $binary_i;

   $decimal_i = bcdiv($decimal_i,'2');

  } while (bccomp($decimal_i,'0'));


 return($binary_i);

}

//empty output string

$output = '';

//define array

$array = [178, 89, 1];

//loop array values

foreach($array as $value){

    //convert to binary and concatenate

    $output .= dec2bin_i($value);

}

//show output

echo $output;

?>


查看完整回答
反对 回复 2023-09-15
  • 3 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信