PHP Bytes 2 DWord

时间:2009-06-07 15:10:57

标签: php byte dword

我有一个数组:

$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;

这是对的还是我做错了?

4 个答案:

答案 0 :(得分:4)

尝试:

$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;

或使用pack / unpack:

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

答案 1 :(得分:2)

或者尝试

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

也许你应该考虑使用按位运算符来更好地传达意图。见http://theopensourcery.com/phplogic.htm