如果我的writeInt()和writeUTF()看起来像:
function write_int($value)
{
$data = pack('N', $value);
fwrite($this->file, $data); #$this->file is get by fopen($path,"wb")
}
function write_utf($value)
{
$this->write_int(strlen($value));
fwrite($this->file,$value);
}
如何阅读?我试试:
function read_int()
{
$data = fread($this->file, 4); #$this->file is get by fopen($path,"rb")
return unpack('N', $data); #unpack return array , not int
}
function read_utf($value)
{
$l = $this->read_int(); #unpack return array , not int
return fread($this->file,$l); #type mismatch
}
您可以看到类型不匹配。
顺便说一下,你可以改变我的writeInt和writeUTF的格式。我只想要一种写文件的方法
答案 0 :(得分:0)
该函数返回您正在读取的变量的二进制数据。您必须将其组成所需的数据类型。例如,在int的情况下,读取文档http://php.net/manual/en/function.pack.php表明N
将一个4字节长整数打包成一个大端字节数组。
此代码显示了如何重建它
function read_int()
{
$data = fread($this->file, 4); #$this->file is get by fopen($path,"rb")
$raw = unpack('N', $data); #unpack return array , not int
$val = (($raw[3] & 0xff) | ($raw[2] << 16) & 0xff00 | ($raw[1] << 8) & 0xff0000 | ($raw[0] << 24) & 0xff0000);
return $val;
}
您可以使用此逻辑重建其他变量。在字符串的情况下,字节只是字符的int val,所以你只需要转换它。