2016-04-01 8 views
0

Wenn mein writeInt() und writeUTF() wie folgt aussieht:Implementieren Sie readInt und readUTF für die PHP-Dateioperation?

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); 
} 

Wie es zu lesen? Ich versuche:

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 
} 

Sie können die Abweichung des Typs sehen.

Übrigens können Sie das Format von writeInt und writeUTF ändern. Ich möchte nur eine Möglichkeit zum Schreiben und Lesen für Datei

Antwort

0

Diese Funktion gibt die Binärdaten der Variablen, die Sie lesen. Sie müssen es in den gewünschten Datentyp zusammenstellen. Im Fall von int beispielsweise liest das Dokument http://php.net/manual/en/function.pack.php, dass N eine 4 Byte lange Ganzzahl in ein Big-Endian-Byte-Array packt.

Dieser Code zeigt, wie es für den Wiederaufbau

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; 
} 

Sie diese Logik andere Variablen wieder aufbauen können. Im Fall von Strings ist das Byte einfach das int val des Zeichens, also müssen Sie es nur umwandeln.

+0

http://blog.csdn.net/guotong1988/article/details/51063015 –