Во входящем 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
… Но я понятия не имею, как преобразовать его обратно в гекс. Возможно, есть более эффективный метод?
hexdec()
а также dechex()
, Вам не нужно распаковывать значение.
$incremented = dechex(hexdec('b70500') + 1);
Это не красиво, и я уверен, что есть более эффективные способы сделать это, но это работает:
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