【问题标题】:PHP Warning: pack(): Type H: illegal hex digit r error [duplicate]PHP警告:pack():类型H:非法十六进制数字r错误[重复]
【发布时间】:2012-12-04 01:37:13
【问题描述】:

可能重复:
pack() in php. Illegal hex digit warning

我正在使用苹果的推送通知服务,为了发送通知,您必须以二进制形式构建消息。我收到以下行的以下错误:

警告:pack(): Type H: 非法十六进制数字 r

警告:pack(): Type H: 非法十六进制数字 y

注意:第 130 行 C:\xampp\htdocs\firecom\FireComAPNS.php 中的数组到字符串转换

这是引发错误的代码行:

$msg = chr(0).pack('n', 32).pack('H*', $devicetoken).pack('n',strlen($payload)) . $payload;

$devicetoken=773f5436825a7115417d3d1e036da20e806efeef547b7c3fe4da724d97c01b30

我在互联网上搜索了很多,但我不知道如何弄乱二进制,任何关于正在发生的事情的帮助将不胜感激!

【问题讨论】:

    标签: php binary runtime-error apple-push-notifications devicetoken


    【解决方案1】:

    在 php

    function hex2bin($hexdata) {
       $bindata="";
       for ($i=0;$i<strlen($hexdata);$i+=2) {
          $bindata.=chr(hexdec(substr($hexdata,$i,2)));
       }
    
       return $bindata;
    }
    

    【讨论】:

    • 我发现了问题所在。 $deviceToken 是一个数组而不是一个字符串。我用 $deviceToken = $row['devicetoken'];得到正确的行,一切都好起来了。
    • 好东西。很高兴听到你自己找到了它。
    • 你想出来了太好了,但更重要的是要意识到 1) 你传递的数组正在被pack 转换为字符串; 2) 字符串值为文本Array; 3) 该字符串中的ry 字符不是有效的十六进制数字; 4) ...这就是它失败的原因。
    猜你喜欢
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2014-09-25
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多