【问题标题】:PHP Pack Warning: pack(): arguments unusedPHP Pack 警告:pack():未使用的参数
【发布时间】:2014-08-30 04:27:46
【问题描述】:

我来了

警告:pack(): 1 个参数在

中未使用
 $vector = pack("H*",0x77,0x99); 




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

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

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

有人知道这个警告吗?

我应该将什么值传递给 pack 。应该是十六进制吗?

【问题讨论】:

  • 所以如果我对 PHP 的理解正确,那么 0x77 首先会转换为十进制值,119,然后再转换为字符串,嗯,'119' 然后仍然传递十六进制解码?
  • 是的,确实如此:结果是十六进制的1190。嘘。

标签: php encoding pack


【解决方案1】:

你应该在一个字符串中传递它的十六进制,像这样:

$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]));

【讨论】:

  • 谢谢。但即使我尝试在引用中给出两个值,我也会收到相同的警告。您是否尝试了两个或多个值?实际上我必须将 .net 脚本转换为 php 。在 .net 中,它们以字节数组的形式传递 0x4A。那么在php中我应该通过什么?
  • 您可以简单地传递一个由"\xHH\xHH" 组成的“字符数组”,其中 H 是一个十六进制字符。您当然可以使用我上面提出的方案,并简单地连接十六进制。我过去只是简单地使用正则表达式将字节数组转换为另一个。作为密码学家,我终于受够了,现在有了一个名为“八进制”的工具,可以在任何形式的字节之间进行转换。不幸的是,我在工作时创造了它,所以正式地它不是我的分享。
  • 哦,伙计...谢谢您的信息...但是您的意思是这个..还是别的什么..举个例子.. $vector= pack('H*',"\x04 \x09");
  • 我只有 h 的问题,c 格式有效.. 格式的重要性是什么.. .. 你能否在答案中添加.. 格式是用于输入还是输出??
  • 你不需要打包那些,那已经是一个字节数组了。但是检查编辑的答案,你应该可以直接复制引号中的C格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2012-12-04
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
相关资源
最近更新 更多