Как я могу использовать PHP File API для записи сырых байтов? - PullRequest
2 голосов
/ 17 сентября 2008

Я хочу записать необработанный байтовый / байтовый поток в позицию в файле. Вот что у меня сейчас:

$fpr = fopen($out, 'r+');
fseek($fpr, 1); //seek to second byte
fwrite($fpr, 0x63); 
fclose($fpr);

Это в настоящее время записывает фактическое строковое значение «99», начиная со смещения байта 1. То есть, он записывает байты «9» и «9». Я просто хочу написать фактическое однобайтовое значение 0x63, которое соответствует числу 99.

Спасибо за ваше время.

Ответы [ 4 ]

7 голосов
/ 17 сентября 2008

fwrite() принимает строки. Попробуйте chr(0x63), если хотите записать 0x63 байт в файл.

4 голосов
/ 17 сентября 2008

Это потому, что fwrite () ожидает строку в качестве второго аргумента. Попробуйте сделать это вместо:

fwrite($fpr, chr(0x63));

chr (0x63) возвращает строку с одним символом со значением ASCII 0x63. (Таким образом, в файл будет записано число 0x63.)

1 голос
/ 17 сентября 2008

Вы пытаетесь передать int в функцию, которая принимает строку, поэтому она преобразуется в строку для вас.

Это напишет, что вы хотите:

fwrite($fpr, "\x63");
0 голосов
/ 23 января 2012

Если вы действительно хотите записать двоичные файлы, я бы советовал использовать подход pack() вместе с файловым API.

См. Этот вопрос для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...