Повторяющиеся двоичные данные почти всегда будут выводить что-то похожее на это. Двоичные данные не предназначены для чтения и понимания людьми.
$binary = pack('N', "123455");
$hex = bin2hex($binary);
echo $hex;
// 0001e23f
Ваш вызов pack()
правильно возвращает двоичные данные 00 01 e2 3f
, представляющие собой 4-байтовое представление с прямым порядком байтов числа 123455. Для числа вы можете проверить это, преобразовав число в шестнадцатеричное (echo dechex(123455);
=> 1e23f
) и добавляя нули, пока не достигнете 4 байтов (8 шестнадцатеричных символов, 0001e23f
).
Echo 'При вводе двоичных данных PHP будет обрабатывать их как строку с символами 00 01
и e2 3f
. 0x0001
является управляющим символом (отображается как «�»), а 0xe23f
не существует как предопределенный символ (он попадает в область частного использования стандарта Unicode), поэтому он будет отображаться как «?».