如何使用特定结构的二进制变量 - php

时间:2014-10-19 11:57:47

标签: php

我想使用udp跟踪器进行通信并向其发送连接请求。

为此我必须首先在php中创建一个16字节的变量并将其发送给跟踪器。

请求变量结构:

首先将其设为64位0x41727101980,将32位设为0。

生成一个32位无符号整数作为随机数,然后将生成的数字添加到变量的末尾。

最后,我的变量的大小应该是128位,等于16个字节。

我用这种方式:

$a = time();
$connect_request = 0x41727101980;
$connect_request .= 0x00000000;
$connect_request .= $a;
var_dump($connect_request);

但结果是:

string '449748612544001413719239' (length=24)

这是24字节而不是16字节。

我现在必须做什么?

1 个答案:

答案 0 :(得分:0)

你有什么数字。

试试这个:

$connect_request = pack("N*",0x417,0x27101980,0,time());

如果您使用的是PHP 5.6,则可以使用pack("JN*", 0x41727101980, 0, time()),允许直接使用64位数字,但是否则您需要手动将大数字分成两个较小的数字(每个32位,因此第二个0x...有八个六角形。)

这会将输入打包成所需长度的字符串,在本例中为128位或24字节。