PHP преобразовать в байт, - PullRequest
4 голосов
/ 29 июля 2010

В Java я могу легко привести число к байту, например:

  System.err.println((byte) 13020);

результат будет

-36

Теперь, как мне добиться того же в PHP

Ответы [ 3 ]

6 голосов
/ 29 июля 2010
echo ($a&0x7f) + ($a&0x80?-128:0);

edit это имитирует то, что на самом деле должно происходить для 8-битного значения со знаком. Когда MSB (бит 7) равен нулю, у нас просто есть значение этих 7 бит. Когда MSB установлен в 1, мы начинаем с -128 (т.е. 1000000b == -128d).

Вы также можете использовать тот факт, что PHP использует целочисленные значения внутри:

$intsize = 64; // at least, here it is...
echo ($a<<($intsize-8))/(1<<($intsize-8));

поэтому вы сдвигаете MSB байта в позицию MS для int, как это видит php, т.е. вы добавляете 56 нулевых бит справа Деление «снимает» эти биты, сохраняя при этом знак значения.

2 голосов
/ 29 июля 2010

Возможно сделать выражение по модулю 256 (если оно не подписано) или по модулю 256 и минус 128.

$val = ($val % 256) - 128

Это работает, если вам нужно только значение.Если вам нужен реальный однобайтовый, может быть, здесь поможет функция pack ().

Редактировать: Верно, 0 будет 128, поэтому, возможно, это решение будет работать:

$val = (($val+128) % 256) - 128
0 голосов
/ 29 июля 2010

Вы не можете. В PHP нет byte типа данных, как в Java.

...