2013-01-14 54 views
3

我想通过一个PHP套接字发送数据的二进制表示。如何通过PHP套接字发送二进制表示?

因此,如果数量为15,socket_write就送00001111的二进制表示的15

我应该怎么办呢?

+0

令人惊叹的是,在界面层,它以二进制方式发送!无需转换。 :D – vanneto

+0

@vanneto如果你使用'socket_write($ fp,15)',它将和'socket_write($ fp,“15”)',I.E.发送字节'0x31 0x35',而据我所见,他想发送一个字节'0x0F' – Esailija

+0

是的,抱歉让人困惑。我想发送数据的单字节表示。我在做socket_write($ sock,15),它发送了两个字节,这让我感到困惑。 –

回答

4

使用chr功能:

socket_write($fp, chr(15)); 

您还可以使用\x转义十六进制值:

socket_write($fp, "\xff\xff\xff\xff"); 

会在每次发送4个字节,其值255。

2

要从任意数据生成二进制表示,请使用pack()函数。

实施例:

$data = pack("v", 15); // "i" is unsigned little endian integer 
socket_write($socket, $data); 

对各种格式的详细信息,请参见手册页。反向功能也有unpack()

+0

这会发送'0x0F 0x00',你希望''C“'发送'0x0F' – Esailija

+0

嗯,这是一个无符号小端16位整数的正确二进制表示。另外'C'对数字> 255无效。 – Koraktor