Вы делаете классическую ошибку запутанных данных с представления этих данных.
Предположим, у вас есть текстовый файл. Если открыть его в блокноте, вы увидите следующее:
hello
world
Это потому, что Блокнот принимает данные ASCII текст. Поэтому он берет каждый байт необработанных данных, интерпретирует его как символ ASCII и отображает этот текст на ваш экран.
Теперь, если вы идете и открыть этот файл с помощью шестнадцатеричного редактора, вы увидите что-то совсем другое :
68 65 6c 6c 6f 0d 0a 77 6f 72 6c 64 hello..world
Это происходит потому, что шестнадцатеричный редактор вместо этого берет каждый байт необработанных данных, и отображает его как двухсимвольное шестнадцатеричное число.
1 - Предполагая, что Windows \r\n
окончания строки и кодировка ASCII.
Так что, если вы ожидаете шестнадцатеричный вывод ASCII, вы должны преобразовать вашей строки в шестнадцатеричной кодировку перед записью (как ASCII текст!) В файл.
В PHP то, что вы ищете, это функция bin2hex
, которая «Возвращает строку ASCII, содержащую шестнадцатеричное представление str». Например:
$str = "Hello world!";
echo bin2hex($str); // output: 48656c6c6f20776f726c6421
Обратите внимание, что режим "wb"
аргумент не вызывает какого-либо специального поведения. Он гарантирует двоичный выход, не hexadecimal мощность. Я не могу подчеркнуть, что есть разница. Единственное, что действительно делает b
, это гарантия того, что окончание строк не будет преобразовано библиотекой при чтении/записи данных.
Что заставляет вас думать, что он не пишет в «реальном двоичном коде»? Что это значит? – Barmar
Что значит «он не пишет в реальном двоичном коде»? Что вы ожидали от результата, и что вы получили? –
Я ожидаю получить что-то вроде 4d61 7572 6963 696f 0063 ecbf 855a 61b7 00d6 7bb7 1200 0000 00ba 7f47, но я получаю обычный текст как обычный текстовый файл. –