PHP字符串到十六进制/字节?

时间:2014-04-11 19:10:26

标签: php arrays string hex byte

我试图编辑文件的字节。更像是十六进制查看器/编辑器。 例如:

//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个字节并将它们更改为某些字符值。 例如:

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

但它只是不起作用...我需要首先将$ string的字母转换为字节,然后编辑字节数组的特定字节($ bytes),而不会破坏文件。

我尝试过使用unpack(),pack()函数,但我不能让它工作...... 我也尝试了ord()函数,但后来将它们保存为interger,但我想保存字符串的字节。

1 个答案:

答案 0 :(得分:1)

听起来你可能需要使用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));
   ?>

根据注释,unpack产生的数组开始时它的索引为1而不是更正常的0.我也不能强烈地强调我没有测试过这个建议。对待它就像一个受过良好教育的猜测。

更多信息:http://www.php.net/manual/en/function.unpack.php

更多信息:http://www.php.net/manual/en/function.pack.php