print_r(bin2hex("11111111"));
echo '</br>';
print_r(bindec("11111111"));
Результат
Мне нужно шестнадцатеричное 16-байтовое значение для шифрования aes. Как происходит преобразование двоичного в шестнадцатеричное в php. Я получаю неправильное значение с помощью функции. Также, когда я конвертирую массив шестнадцатеричных значений в строку изменения длины байта
Вы получаете правильный результат, это просто не то, что вы хотите. bin2hex()
возвращает строку ASCII шестнадцатеричного представления. Цитата из руководства:
Возвращает Строка ASCII содержащий шестнадцатеричное представление ул.
Так что если вы хотите шестнадцатеричное число, вы можете использовать это:
print_r(dechex(bindec("11111111")));
Конвертер для получения шестнадцатеричного числа dechex()
, но для этого нужно десятичное число. Для этого мы сначала преобразуем двоичную строку в десятичное число, используя bindec()
а затем передать его в dechex()
Например:
print_r(dechex(bindec("11111111")));
<?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 битах) действительно является отрицательным числом, но только если вы интерпретируете его как единое целое.