我是PHP的初学者,我的任务是构建一些命令,这些命令将被发送到一个设备上。我使用的是OSX和PHP 5.5.3.8版本。 为了创建二进制数据,我使用了“pack”函数。以下是我的代码示例:
<?php
$in_1 = 0x3100;
$in_2 = 0031;
echo "Inputs: " . $in_1 . "\t" . $in_2;
$bin = pack("v*", $in_1, $in_2);
echo "\nlength: ". strlen($bin);
printf ("\npacked result: %x \n",$bin);
printf("HEX result %h\n", $bin);
file_put_contents("ausgabe.log", $bin, FILE_APPEND);
?>
我的终端输出为:
Inputs: 12544 25
length: 4
packed result: 0
HEX result
我对$in_2的数值25感到困惑。
如果我将0x0031分配给$in_2,那么结果是49。
这里有什么问题吗?
顺带一提:我的最终目标是构建二进制命令,它们在以下方案中恰好占用12个字节(每行作为注释的十进制值):
function set_routing_item ($in_ch, $out_ch, $on_off, $seq)
{
$command = toggle_two_bytes(37); // 37 --> 0x2500
$status = 0x0000; // 0 --> 0x0000
$pos = 4; // 4= route item
$channel_1 = $in_ch; // 3
$channel_2 = $out_ch; // 6
$preset_no = 0xff; // 255
$value = $on_off; // 33145
$seq = $seq; // 35
// implement building of command using pack here
}
在这种情况下,结果(十六进制)应该是:25 00 00 00 04 03 06 FF 79 81 23 00。
谢谢!