在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。