В PHP, как записать одно беззнаковое значение байта в файл с заданным смещением?

Все, что я могу найти в руководстве по PHP для записи сырых байтов в файл, — это fwrite. Но когда я использую его (открывая файл в режиме b), кажется, что он пишет символы, а не необработанные байты.

Поиски в Интернете ничего не дают.

Я использую большой массив байтов в файле для хранения битов, представляющих члены большого набора. Поскольку я манипулирую только одним битом за раз, я хочу прочитать и записать один необработанный байт, содержащий текущий изменяемый бит.

Алгоритм выполнения этого набора манипуляций не прост, но не имеет отношения к моему вопросу, а именно: как записать один необработанный байт (или больший блок данных фиксированной длины) в файл со смещением?

0

Решение

Я получил хорошую помощь по этой теме от PHP News Group (список рассылки). Хотя руководство по PHP, похоже, документирует fwrite как запись символьных строк или двоичных данных, в действительности оно будет писать только символьные строки. Например, если вы записываете целое или двоичное значение 0x1 в виде байта, значение 0x31 будет фактически записано независимо от того, задан ли режим ‘b’ в fopen.

Одним из решений является использование fprintf. Например, fprintf($Res, "%c", 0x1); будет фактически записывать значение байта 0x1 при текущем смещении в файле.

1

Другие решения

использование пак правильно упаковать ваши данные.

Пример:

$a = 1 & 1;
$b = pack('i', $a);
file_put_contents('sample', $b);

Затем просмотрите файл sample с шестнадцатеричным редактором.

0

По вопросам рекламы [email protected]