【问题标题】:PHP Bytes 2 DWordPHP 字节 2 双字
【发布时间】:2010-11-01 00:22:19
【问题描述】:

我有一个数组:

$arr[0] = 95
$arr[1] = 8
$arr[2] = 0
$arr[3] = 0

那是字节。我需要一个 DWORD。 我试过了:

$dword = $arr[0]+$arr[1]*265+$arr[2]*265*265+$arr[3]*265*265*265;

是对还是我做错了?

【问题讨论】:

    标签: php byte dword


    【解决方案1】:

    试试:

    $dword = (($arr[3] & 0xFF) << 24) | (($arr[2] & 0xFF) << 16) | (($arr[1] & 0xFF) << 8) | ($arr[0] & 0xFF);
    

    也可以按照自己的方式进行一些更正:

    $dword = $arr[0] + $arr[1]*0x100 + $arr[2]*0x10000 + $arr[3]*0x1000000;
    

    或者使用打包/解包:

    $dword = array_shift(unpack("L", pack("CCCC", $arr[0], $arr[1], $arr[2], $arr[3])));
    

    【讨论】:

      【解决方案2】:

      或者试试

      <?php
      $arr = array(95,8,0,0);
      $bindata = join('', array_map('chr', $arr));
      var_dump(unpack('L', $bindata));
      (Emil H 和我的代码)都给你 2143 作为结果。

      【讨论】:

      • +1。我也在想同样的方法,但想先尝试一下。将其添加到我的答案中只是为了发现您已经提出了建议。 :)
      【解决方案3】:

      或者至少使用 256 而不是 265。

      【讨论】:

        【解决方案4】:

        您的代码应该可以正常工作,但您应该乘以 256,而不是 265。(在 8 位中,有 2^8 = 256 个唯一值)。它有效,因为乘以 256 与将位向左移动 8 位相同。

        也许您应该考虑改用位运算符,以更好地传达意图。见http://theopensourcery.com/phplogic.htm

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-13
          • 2013-06-09
          • 2014-04-29
          相关资源
          最近更新 更多