2009-06-07 7 views
3

Iは、配列を有する:PHPバイト2の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

試してみてください。

$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]))); 
+0

ありがとうございました –

0

をまたは非常に少なくとも使用で265ではなく256である。

+0

@Emil、0xffは255ですので間違っています。 – driis

+0

申し訳ありません。私の悪い。 :) –

+0

私は自分のコードで256を持って、ここに間違って書いた:o。 Thx –

0

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

おそらく、意図をよりよく伝えるためにビット演算子を使用することを検討する必要があります。 http://theopensourcery.com/phplogic.htm

+0

私のコードに256があり、ここに間違って書いています:o。 Thx –

2

または

<?php 
$arr = array(95,8,0,0); 
$bindata = join('', array_map('chr', $arr)); 
var_dump(unpack('L', $bindata));
を試してください(エミールHと私のコード)結果として2143が得られます。

+0

+1。私は同じ方法を考えていましたが、まずそれを試してみたかったのです。あなたがすでにそれを提案していたのを見つけるために私の答えにそれを加えました。 :) –

関連する問題