将PHP文件读取为字节数组

10

我有一个使用JAVA编写的文件,其中包含一组用二进制编写的整数数组。我使用for循环遍历该数组,并使用此方法将其写入。

public static void writeInt(OutputStream out, int v) throws IOException {
    out.write((v >>> 24) & 0xFF);
    out.write((v >>> 16) & 0xFF);
    out.write((v >>> 8) & 0xFF);
    out.write((v >>> 0) & 0xFF);
}

我想问如何在PHP中读取这个文件。


请查看unpack - Orangepill
@Orangepill,我是 PHP 的新手,仅凭手册很难理解。你能帮我写一段代码吗?假设我们从以下代码开始读取文件:$filename = "myFile.sav"; $handle = fopen($filename, "rb"); $contents = fread($handle, filesize($filename)); - BlackRoot
2个回答

15

我相信你正在寻找的代码是:

$byteArray = unpack("N*",file_get_contents($filename));

更新:原帖作者提供了可行的代码

$filename = "myFile.sav"; 
$handle = fopen($filename, "rb"); 
$fsize = filesize($filename); 
$contents = fread($handle, $fsize); 
$byteArray = unpack("N*",$contents); 
print_r($byteArray); 
for($n = 0; $n < 16; $n++)
{ 
    echo $byteArray [$n].'<br/>'; 
}

谢谢,谢谢,谢谢Orangepill,这正是我要找的。 我使用的代码: `$filename = "myFile.sav"; $handle = fopen($filename, "rb"); $fsize = filesize($filename); $contents = fread($handle, $fsize); $byteArray = unpack("N*",$contents);print_r($byteArray);for($n = 1; $n <= 16; $n++){ echo $byteArray [$n].'<br/>'; }` - BlackRoot
我无法让它正常工作。示例代码在解包时失败了。可能是因为我尝试读取的文件有问题? - FredFury
在工作示例中,调用fclose关闭文件资源也是一个好主意,不是吗? - Codie Morgan
我发现这导致了一个32位整数数组,所以我不确定是否适合使用“$byteArray”这个名称。为了获得8位整数,我必须使用“C”而不是“N”。 - qrsngky

5

您应该将文件读取为字符串,然后使用unpack解析它。在本例中,您以大端字节顺序存储了一个32位整数,因此请使用:

$out = unpack("N", $in);

这里有格式化代码的说明文档:http://www.php.net/manual/en/function.pack.php


谢谢Joni,但是当我执行这段代码时,我只得到了一个元素的数组。下面Orangepill的解决方案非常好,可以获取文件中的所有元素。我使用了以下代码:$filename = "myFile.sav"; $handle = fopen($filename, "rb"); $fsize = filesize($filename); $contents = fread($handle, $fsize); $out = unpack("N", $contents); print_r($out);这段代码只返回一个元素。 - BlackRoot
如果你的文件一直到结尾都有压缩整数(packed ints),而不仅仅只有一个,那么可以使用星号 * 格式化代码来获取所有整数。或者您可以添加一个数字来指示应读取多少个整数。这些内容都在链接页面上有详细说明。 - Joni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接