Как я могу использовать PHP File api для записи необработанных байтов?
Вопрос
Я хочу записать необработанный поток байт / байт в позицию в файле.Это то, что у меня есть на данный момент:
$fpr = fopen($out, 'r+');
fseek($fpr, 1); //seek to second byte
fwrite($fpr, 0x63);
fclose($fpr);
В данный момент это записывает фактически строковое значение "99", начинающееся со смещения в байтах 1.Т.е. он записывает байты "9" и "9".Я просто хочу записать фактическое однобайтовое значение 0x63, которое, оказывается, представляет число 99.
Спасибо, что уделили мне время.
Решение
fwrite()
нужны ниточки.Попробуй chr(0x63)
если вы хотите написать 0x63
байт в файл.
Другие советы
Это потому, что fwrite() ожидает строку в качестве второго аргумента.Попробуйте сделать это вместо этого:
fwrite($fpr, chr(0x63));
chr(0x63) возвращает строку из одного символа со значением ASCII 0x63.(Таким образом, он запишет в файл число 0x63.)
Вы пытаетесь передать int функции, которая принимает строку, поэтому она преобразуется в строку для вас.
Здесь будет написано то, что вы хотите:
fwrite($fpr, "\x63");
Если вы действительно хотите записывать двоичные файлы в файлы, я бы посоветовал использовать pack()
подходите вместе с файловым API.
Смотрите этот вопрос для примера.