如何通过PHP套接字发送二进制表示形式?

3
我想通过PHP套接字发送数据的二进制表示。例如,如果数字为15,socket_write将以二进制形式发送00001111代表15。请问我该如何做?

令人惊奇的是,在接口层,它无论如何都会以二进制形式发送!不需要转换。:D - mishmash
@vanneto 如果你使用 socket_write($fp, 15),它将与 socket_write($fp, "15") 相同,即发送字节 0x31 0x35,而据我所见,他想要发送一个字节 0x0F - Esailija
是的,抱歉让你感到困惑。我想发送数据的单字节表示。我之前使用了socket_write($sock, 15),但它会发送两个字节,这让我感到困惑。 - Mitchell M
2个回答

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()用于反向功能。


这将发送 0x0F 0x00,你只希望 "C" 发送 0x0F - Esailija
那是无符号小端16位整数的正确二进制表示。另外,对于大于255的数字,C是无效的。 - Koraktor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接