2011-04-14 142 views
2

我有一个文件的内容表示为一个十六进制字符串,我想从该十六进制字符串重新创建该文件。我该怎么做?PHP:从HEX字符串创建文件

附加信息
十六进制字符串是从火狐存储器缓存项采取诸如以下之一:

about:cache-entry?client=HTTP&sb=1&key=http://www.google.co.uk/images/nav_logo40.png 

我处理从这些条目中的<pre>元件以提取并连接所有的十六进制值。所以从缓存条目获得的以下数据输出线:

00000000: 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 .PNG........IHDR 

我生产这个

89504e470d0a1a0a0000000d49484452 

我重复相同的过程对每个线,使得我最终用含1名大的字符串所有十六进制值连接在一起。

+0

展开你的问题。什么被“诅咒”?你在谈论文件的二进制值或其他东西的编码吗? – 2011-04-14 11:54:54

+0

请参阅**其他信息** – Max 2011-04-14 15:06:11

+0

您可以使用[这个小脚本](https://gist.github.com/zxcmehran/b4cab69b70166187f5cb)提取Firefox和Chrome的缓存条目。 – zxcmehran 2015-10-17 17:25:46

回答

4

您可以使用pack

file_put_contents($filename, pack('H*', $hex)); 

这会变成十六进制的八位字节的字符串转换成二进制:

var_dump(pack('H*', '313233')); // string(3) "123" 
+0

我测试了你的方法,但它不起作用。请您重新评估我的问题,并考虑到我添加到**中的其他信息**? – Max 2011-04-14 15:05:07

+0

@ user359650:它应该无论如何工作。 – Gumbo 2011-04-14 15:32:23

+0

确实如此。我的错。我的脚本没有正确得到十六进制输出。现在全部修复:) – Max 2011-04-15 08:09:30