3

私は配列を持っています:

$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

4 に答える 4

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;

またはパック/アンパックを使用:

$dword = array_shift(unpack("L", pack("CCCC", $arr[0], $arr[1], $arr[2], $arr[3])));
于 2009-06-07T15:14:04.183 に答える
2

または試してみてください

<?php
$arr = array(95,8,0,0);
$bindata = join('', array_map('chr', $arr));
var_dump(unpack('L', $bindata));
両方 (Emil H と私のコード) は、結果として 2143 を返します。

于 2009-06-07T15:21:59.953 に答える
0

または、少なくとも 265 ではなく 256 を使用してください。

于 2009-06-07T15:17:06.470 に答える
0

コードは正しく動作するはずですが、265 ではなく 256 で乗算する必要があります (8 ビットでは、2^8 = 256 の一意の値があります)。256 を乗算することは、ビットを左に 8 桁シフトすることと同じであるため、機能します。

おそらく、意図をより適切に伝えるために、代わりにビット単位の演算子を使用することを検討する必要があります。http://theopensourcery.com/phplogic.htmを参照してください。

于 2009-06-07T15:18:09.040 に答える