Все, что я могу найти в руководстве по PHP для записи сырых байтов в файл, — это fwrite. Но когда я использую его (открывая файл в режиме b), кажется, что он пишет символы, а не необработанные байты.
Поиски в Интернете ничего не дают.
Я использую большой массив байтов в файле для хранения битов, представляющих члены большого набора. Поскольку я манипулирую только одним битом за раз, я хочу прочитать и записать один необработанный байт, содержащий текущий изменяемый бит.
Алгоритм выполнения этого набора манипуляций не прост, но не имеет отношения к моему вопросу, а именно: как записать один необработанный байт (или больший блок данных фиксированной длины) в файл со смещением?
Я получил хорошую помощь по этой теме от PHP News Group (список рассылки). Хотя руководство по PHP, похоже, документирует fwrite как запись символьных строк или двоичных данных, в действительности оно будет писать только символьные строки. Например, если вы записываете целое или двоичное значение 0x1 в виде байта, значение 0x31 будет фактически записано независимо от того, задан ли режим ‘b’ в fopen.
Одним из решений является использование fprintf. Например, fprintf($Res, "%c", 0x1);
будет фактически записывать значение байта 0x1 при текущем смещении в файле.
использование пак правильно упаковать ваши данные.
Пример:
$a = 1 & 1;
$b = pack('i', $a);
file_put_contents('sample', $b);
Затем просмотрите файл sample
с шестнадцатеричным редактором.