如何制作具有特定结构的二进制变量php


how make binary varibale with specific structure - 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字节。

我现在该怎么办??

你所拥有的都是数字。

试试这个:

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

如果您有PHP 5.6,那么您可以使用pack("JN*", 0x41727101980, 0, time()),允许直接使用64位数字,但除此之外,您需要手动将大数字拆分为两个较小的数字(每个数字都是32位的,因此第二个0x...有八个十六进制)。

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