integer — Увеличивает шестнадцатеричное значение (little endian?) в переполнении стека

Во входящем UDP-пакете у меня есть шестнадцатеричное значение b70500, Это на самом деле порядковый номер (1463). Мне нужно увеличить это значение перед отправкой на сервер в том же формате (b80500).

введите описание изображения здесь

Как я могу в PHP увеличить значение на единицу?

Используя предложенный код Вот Мне удалось преобразовать шестнадцатеричное значение в целое число и увеличить его на единицу:

$original_hex = 'b70500';                                        // 1463
$original_int = unpack("H*", strrev(pack("H*", $original_hex))); // 0005b7
$incremented_int = hexdec($original_int[1]) + 1;                 // 1464
$incremented_hex = ?                                             // Expected result: b80500

… Но я понятия не имею, как преобразовать его обратно в гекс. Возможно, есть более эффективный метод?

1

Решение

hexdec() а также dechex(), Вам не нужно распаковывать значение.

$incremented = dechex(hexdec('b70500') + 1);
2

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

Это не красиво, и я уверен, что есть более эффективные способы сделать это, но это работает:

function increment_hex($hex) {
$original_hex = $hex;
$original_int = unpack("H*", strrev(pack("H*", $original_hex)));
$incremented_int = hexdec($original_int[1]) + 1;
$incremented_hex = dechex($incremented_int);

$padded_hex = str_pad($incremented_hex, 6, '0', STR_PAD_LEFT);
$reversed_hex = unpack("H*", strrev(pack("H*", $padded_hex)));

return $reversed_hex[1];
}

echo "result: " . increment_hex('b70500') . "\n";

result: b80500

0

По вопросам рекламы [email protected]