PHP байт 2 DWord - PullRequest
       12

PHP байт 2 DWord

3 голосов
/ 07 июня 2009

У меня есть массив:

$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 голосов
/ 07 июня 2009

Попробуйте:

$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 голосов
/ 07 июня 2009

Или попробуйте

<?php
$arr = array(95,8,0,0);
$bindata = join('', array_map('chr', $arr));
var_dump(unpack('L', $bindata));
, оба (Эмиль Х и мой код), в результате вы получите 2143.
0 голосов
/ 07 июня 2009

Ваш код должен работать правильно, но вы должны умножить на 256, а не 265. (в 8 битах 2 ^ 8 = 256 уникальных значений). Это работает, потому что умножение на 256 - это то же самое, что сдвиг битов на 8 позиций влево.

Возможно, вам следует рассмотреть возможность использования вместо этого побитовых операторов, чтобы лучше передать намерение. Смотри http://theopensourcery.com/phplogic.htm

0 голосов
/ 07 июня 2009

Или, по крайней мере, использовать 256, а не 265.

...