要将二进制数据写入文件,可以使用函数pack()
和unpack()
。 Pack会产生一个二进制字符串。由于结果是一个字符串,您可以将这些整数串联到一个字符串中。然后将此字符串作为一行写入您的文件。
通过这种方式,您可以使用file()
轻松阅读,这会将文件放入一行数组中。然后每行只有unpack()
,并且你有你的原始数组。
像这样:
$arr = array(
array (1531412763, 1439959339),
array (123, 456, 789),
);
$file_w = fopen('binint', 'w+');
// Creating file content : concatenation of binary strings
$bin_str = '';
foreach ($arr as $inner_array_of_int) {
foreach ($inner_array_of_int as $num) {
// Use of i format (integer). If you want to change format
// according to the value of $num, you will have to save the
// format too.
$bin_str .= pack('i', $num);
}
$bin_str .= "\n";
}
fwrite($file_w, $bin_str);
fclose($file_w);
// Now read and test. $lines_read will contain an array like the original.
$lines_read = [];
// We use file function to read the file as an array of lines.
$file_r = file('binint');
// Unpack all lines
foreach ($file_r as $line) {
// Format is i* because we may have more than 1 int in the line
// If you changed format while packing, you will have to unpack with the
// corresponding same format
$lines_read[] = unpack('i*', $line);
}
var_dump($lines_read);
[包(http://php.net/manual/en/function.pack.php)? – Zimmi
如果你真的需要节省空间,为什么不压缩数据呢?在这一点上可能也是如此。 – Andrew
@Zimmi是的,这正是我需要的,但是我需要为每个单独的值调用'pack'还是有更简单的方法? –