PHP Bayt 2 DWord

3 Cevap php

Ben bir dizi var:

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

That are bytes. I need a DWORD. I tried:

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

Doğru ya ben yanlış yapıyorum?

3 Cevap

Deneyin:

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

Bazı düzeltmeler ile yolunuzu da yapılabilir:

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

Ya pack / unpack kullanarak:

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

Ya da en azından 256 yerine 265 kullanır.

Sizin kodu doğru şekilde çalışması gerektiğini, ancak 265, 256 ile değil çarpmak gerekir. (8 bit, 2 ^ 8 = 256 benzersiz değerler vardır). 256 ile çarparak sola bitleri 8 yer değiştirme ile aynıdır, çünkü çalışır.

Belki de daha iyi niyeti iletmek yerine bitsel operatörleri kullanarak düşünmelisiniz. Bkz http://theopensourcery.com/phplogic.htm