H型:非法的十六进制数字x

时间:2014-02-25 13:28:00

标签: php sql-server

我正在从一个应用程序到另一个应用程序进行数据转换。其中一个MSSQL表存储文档,如PDF和DOC为十六进制字符串。我被要求转换这些十六进制字符串并写入文件。

我用Google搜索并找到了一个建议如下的网站:

$hex    = file_get_contents('hex.txt');
file_put_contents('converted.pdf', pack('H*', $hex));

其中hex.txt是表中数据的提取。但是,我收到了错误

  

PHP警告:pack():输入H:非法的十六进制数字x in ....

以下是提取的十六进制字符串

的缩短版本
  

0xEC5A09584CFBFB3F33A575A64D9B164EB750A .....

现在,我想知道是否可以将这些十六进制字符串转换为二进制文件并将其写入文件。谢谢你,希望有人可以帮我解决这个问题。

4 个答案:

答案 0 :(得分:1)

0x只是将字符串表示为十六进制数。剥去它并pack()其余部分。

答案 1 :(得分:0)

使用pdf的pdf生成库:

答案 2 :(得分:0)

这个怎么样:

$hexAsString = file_get_contents( 'hex.txt' );

// Just in case...
assert( '0x' == substr( $hexAsString, 0, 2 ));

// Skip first two chars
$hexDigits = substr( $hexAsString, 2, strlen( $hexAsString ) -2 );

file_put_contents( 'converted.pdf', pack('H*', $hexDigits));

答案 3 :(得分:0)

我认为您已在评论中发布了问题的答案:

  

十六进制字符串由名为Front Desk的软件生成   将上传的文件转换为十六进制字符串并将其存储为十六进制字符串。

您最好的选择是找到关于Front Desk如何转换文件的某种文档;或者通过上传一些新的简单测试文件来进行一些试验和错误逆向工程。

很可能系统会在十六进制字符串中添加某种检查/元数据。或者首先进行某种压缩(想想ZIP)。