Как я могу использовать PHP File api для записи необработанных байтов?

StackOverflow https://stackoverflow.com/questions/77558

  •  09-06-2019
  •  | 
  •  

Вопрос

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

$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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top