在PHP中,如何以给定的偏移量将一个无符号字节值写入文件


In PHP, how to write one unsigned byte value to a file at a given offset?

在PHP手册中,我所能找到的将原始字节写入文件的方法就是fwrite。但当我使用它(以b模式打开文件)时,它似乎是写字符,而不是原始字节。

网络搜索一无所获。

我在文件中使用一个大的字节数组来保存位,表示一个大集合的成员。由于我一次只操作一个位,所以我想读取和写入包含当前更改位的一个原始字节。

执行此集合操作的算法很简单,但与我的问题无关,即:如何将一个原始字节(或更大的固定长度数据块)以偏移量写入文件?

使用pack正确打包数据。

示例:

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

然后使用十六进制编辑器查看文件sample

我收到了PHP新闻组(邮件列表)关于这个主题的良好帮助。尽管PHP手册似乎将fwrite记录为写入字符串或二进制数据,但实际上它只写入字符串。例如,如果将整数值或二进制值0x1写入字节,则无论fopen中是否指定了"b"模式,都将实际写入值0x31。

一种解决方案是使用fprintf。例如,fprintf($Res, "%c", 0x1);实际上会在文件中的当前偏移量处写入字节值0x1。