我正在尝试编辑文件的字节数。更像是一个十六进制查看器/编辑器。例如:
//Adding the file bytes to array (byte array)
$bytes = str_split(file_get_contents("test.file")); //It can be any file. like jpg,png, exe, jar...
现在我只想编辑5个字节,并将它们更改为一些chracter值。例如:
//Adding the file bytes to an array (byte array)
$bytes = str_split(file_get_contents("test.file")); //It can be any file. like jpg,png, exe,jar...
$string = "hello";
$bytes[5] = $string[0];
$bytes[6] = $string[1];
$bytes[7] = $string[3];
$bytes[8] = $string[4];
file_put_contents("edited.file", $bytes);
但它就是不起作用。。。我需要首先将$字符串的字母转换为字节,然后编辑字节数组的特定字节($字节),而不会损坏文件。
我试过使用unpack()、pack(。。。我也尝试过ord()函数,但后来将它们保存为interger,但我想保存字符串的字节数。
听起来您可能需要使用unpack来读取二进制数据,然后打包将其写回。
根据文件,这大概就是你想要的。(然而YMMV,因为我从来没有真正为自己做过这件事。)
<?php
$binarydata = file_get_contents("test.file");
$bytes = unpack("s*", $binarydata);
$string = "hello";
$bytes[5] = $string[0];
$bytes[6] = $string[1];
$bytes[7] = $string[3];
$bytes[8] = $string[4];
file_put_contents("edited.file", pack("s*", $bytes));
?>
根据注释,解包生成的数组的索引从1开始,而不是更正常的0。此外,我再怎么强调也不为过,我根本没有测试过这个建议。最好把它当作一个有根据的猜测。
更多信息:http://www.php.net/manual/en/function.unpack.php
更多信息:http://www.php.net/manual/en/function.pack.php