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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
6 128
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

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

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

fwrite($fpr, "\x63");

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

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

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

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

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

Другие вопросы по теме