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

时间:2016-07-24 20:14:39

标签: php file binary writing

我在PHP手册中找到的用于将原始字节写入文件的所有内容都是fwrite。但是当我使用它(在b模式下打开文件)时,它似乎是写字符,而不是原始字节。

网络搜索没有任何用处。

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

这样设置的算法简单,但与我的问题无关,即:如何将一个原始字节(或更大的固定长度数据块)写入偏移量的文件中?

2 个答案:

答案 0 :(得分:1)

我从PHP新闻组(邮件列表)那里得到了很好的帮助。尽管PHP手册似乎将fwrite记录为编写字符串或二进制数据,但实际上它只会写入字符串。例如,如果将整数或二进制值0x1写为字节,则无论是否在fopen中指定“b”模式,都将实际写入值0x31。

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

答案 1 :(得分:0)

使用pack正确打包数据。

示例:

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

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