2014-08-28 104 views
0

我越来越PHP包警告:包():参数未使用

警告:包():1个论点

$vector = pack("H*",0x77,0x99); 




$vector = pack("H*","4A","76"); // with quotes also give same warning 

未使用的,但如果我只用一个值没有警告

$vector = pack("H*",0x77); 

有人知道这个警告吗?

我应该传递什么样的价值。它应该是十六进制吗?

+0

所以,如果我理解正确的PHP,那么'0x77'先转换为十进制值, '119',然后转换成一个字符串,呃,'119',然后仍然通过十六进制解码? – 2014-08-29 11:10:29

+0

是的,它确实:结果是十六进制的“1190”。啧。 – 2014-08-29 11:31:35

回答

2

你应该通过它的十六进制数的字符串,像这样:

$vector = pack("H*", "7799"); 

如果使用0x77你已经有了一个值77H的数值,即编译器会从十六进制数转换价值为二进制 - 没有必要使用pack就可以了。

如果你真的想使用0x77,0x99记号,然后把符号在引号和使用以下命令:

$hex="0x77,0x99"; 
preg_match_all("/0x([0-9A-F]{2})/i", $hex, $out); 
$data = pack("H*", join($out[1])); 
+0

谢谢。但即使我试图在报价中给出两个值,我也会得到同样的警告。你有没有尝试两个或更多的价值观?其实我必须转换一个,网络脚本为PHP。在.net中它们传递字节数组中的0x4A。所以在PHP中,我应该通过什么? – zod 2014-08-29 14:53:59

+0

您可以简单地传递一个由“\ xHH \ xHH”构成的“字符数组”,其中H是一个十六进制字符。你当然可以用上面提到的方案,并简单地连接十六进制。我以前只是使用正则表达式将字节数组转换为另一个。作为密码学家,我终于有了足够的资源,现在有一个名为“Octational”的工具,可以在任何形式的字节之间进行转换。不幸的是,我在工作中创造了这样的东西,所以我们不能分享。 – 2014-08-29 18:27:17

+0

哦男人...谢谢你的信息...但是你的意思是这个..或其他..只是举一个例子.. $ vector = pack('H *',“\ x04 \ x09”); – zod 2014-08-29 19:57:36