【问题标题】:PHP Pack function doesn't like stringPHP Pack 函数不喜欢字符串
【发布时间】:2014-12-12 20:45:49
【问题描述】:

在 PHP 中需要一些有关 pack() 函数的帮助。文档在我头上..

我有以下代码:

$arr_upc = array();
    if ($user_pass_code !== '' )
    {
        $arr_upc = str_split($user_pass_code); // Split provided pass code into char array for building the command
    }else{
        $arr_upc = str_split('0000'); // Provide an invalid code by default
    }

    //$arr_upc[0], $arr_upc[1], $arr_upc[2], $arr_upc[3]
    $num1 = '0x0' . $arr_upc[0];
    $num2 = '0x0' . $arr_upc[1];
    $num3 = '0x0' . $arr_upc[2];
    $num4 = '0x0' . $arr_upc[3];

    $cmd = pack("C*", 0x78, 0x08, 0x10, 0x00, 0x08, 0x01, 0x05, 0x00, 0x0E, 0x53);

    //$cmd = pack("C*", 0x78, 0x08, 0x10, 0x00, $num1, $num2, $num3, $num4, 0x0E, 0x53); // WHAT I'D LIKE TO USE BUT NOT WORKING

当我这样使用它时: $cmd = pack("C*", 0x78, 0x08, 0x10, 0x00, 0x08, 0x01, 0x05, 0x00, 0x0E, 0x53);

效果很好。

当我尝试用字符串变量替换该列表中的某些项目时,它会失败: $cmd = pack("C*", 0x78, 0x08, 0x10, 0x00, $num1, $num2, $num3, $num4, 0x0E, 0x53); // 失败

我猜 pack 不喜欢它,或者我需要在将其输入函数之前将其转换为某种东西,但我现在迷路了。

【问题讨论】:

  • 您的问题不在于pack 函数。构造字符串 "0x09" 不会使 PHP 将其解释为数字 0x09 文字。 -- 这到底是怎么回事?
  • 将字符串转换为数字,例如这样 - pack("C*", 0x78, 0x08, 0x10, 0x00, $num1 * 1, $num2 * 1, $num3 * 1, $num4 * 1, 0x0E, 0x53) 另外,请看这里 - stackoverflow.com/questions/6438864/…
  • 谢谢 Cheery,我会试试的。这是有道理的马里奥。我有点“知道”它在字面上并不相等,但不确定将它转换为数字的缺失步骤是什么。这是一个网络应用程序的一部分,它将与博世警报面板交互(我正在使用他们的 API 编写布防/撤防功能)。

标签: php pack


【解决方案1】:

试试这个改变:

$num1 =  0+'0x'.$arr_upc[0];
$num2 =  0+'0x'.$arr_upc[1];
$num3 =  0+'0x'.$arr_upc[2];
$num4 =  0+'0x'.$arr_upc[3];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2020-12-06
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多