Побитовое и в переполнении стека

Я очень новое лицо в PHP. Я прочитал это dechex(255) даст соответствующее шестнадцатеричное значение ff в PHP.

Мне нужно шестнадцатеричное значение -105, Я старался dechex(-105) и получил результат как ffffff97, Но я просто хочу только 97 делать какие-то вещи.

В Java я знаю, что немного мудрая операция с 0xff дал нам результат 97 то есть (byte)-105 & (byte)0xff = 0x97,

Пожалуйста, найдите решение в PHP так же, как я делал в Java.

4

Решение

Вы можете сделать это в php следующим образом:

var_dump(dechex(-105 & 255))

сделать его из последнего байта (пример вывода ниже)

string(2) "97"
1

Другие решения

dechex () дает шестнадцатеричное значение для десятичного значения от 0 до 2 * PHP_INT_MAX + 1 (без знака int).

Все, что ниже 0 или выше 2 * PHP_INT_MAX + 1, будет зациклено.

-105 это НЕ 0xffffff97, и это не 0x97

0xffffff97 — 4294967191.
и 0x97 — 151.

Если вы хотите, чтобы шестнадцатеричное представление отрицательного числа превратилось в положительное число, используйте функцию abs(),

$abs = abs(-105); // $abs becomes +105
$hex = dechex($abs); // $hex becomes 69
1

Либо вы хотите двоичное отрицательное значение (ffffff97) или значение со знаком

// for a signed value
$i = -105;
if($i < 0)
echo '-'.dechex(abs($i));
else echo dechex($i);

Если вы хотите удалить переднюю «F»

echo preg_replace('#^f+#', '', dechex($i));
0
По вопросам рекламы [email protected]