Как мне преобразовать 8-битные двоичные данные в шестнадцатеричные

print_r(bin2hex("11111111"));
echo '</br>';
print_r(bindec("11111111"));

Результат

  • 131313131313131
  • 255

Мне нужно шестнадцатеричное 16-байтовое значение для шифрования aes. Как происходит преобразование двоичного в шестнадцатеричное в php. Я получаю неправильное значение с помощью функции. Также, когда я конвертирую массив шестнадцатеричных значений в строку изменения длины байта

4

Решение

Вы получаете правильный результат, это просто не то, что вы хотите. bin2hex() возвращает строку ASCII шестнадцатеричного представления. Цитата из руководства:

Возвращает Строка ASCII содержащий шестнадцатеричное представление ул.

Так что если вы хотите шестнадцатеричное число, вы можете использовать это:

print_r(dechex(bindec("11111111")));
1

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

Конвертер для получения шестнадцатеричного числа dechex(), но для этого нужно десятичное число. Для этого мы сначала преобразуем двоичную строку в десятичное число, используя bindec() а затем передать его в dechex()Например:

print_r(dechex(bindec("11111111")));
1

<?php
$str = "Hello world!";
echo bin2hex($str) . "<br>";
echo pack("H*",bin2hex($str)) . "<br>";
?>

Руководство по PHP.NET:
http://php.net/manual/en/function.bin2hex.php

Проверьте свой результат: http://www.cs.princeton.edu/courses/archive/fall07/cos109/bc.html

Детальное объяснение:
http://www.computerhope.com/binhex.htm

Это просто 9 * 16 + F, где F — 15 (буквы от A до F означают от 10 до 15). Другими словами, 0x9F — это 159.

Это ничем не отличается от числа 314 159:

  3 * 100,000 (10^5, "to the power of", not "xor")
+ 1 *  10,000 (10^4)
+ 4 *   1,000 (10^3)
+ 1 *     100 (10^2)
+ 5 *      10 (10^1)
+ 9 *       1 (10^0)
for decimal (base 10).

Подписанность такого числа отчасти «на уровень выше». Значение без знака 159 (в 8 битах) действительно является отрицательным числом, но только если вы интерпретируете его как единое целое.

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