【问题标题】:How do I send the binary representation through a PHP socket?如何通过 PHP 套接字发送二进制表示?
【发布时间】:2013-01-14 15:11:29
【问题描述】:

我正在尝试通过 PHP 套接字发送数据的二进制表示。

所以如果数字是 15,socket_write 将发送 00001111 作为 15 的二进制表示。

我应该怎么做?

【问题讨论】:

  • 令人惊奇的是,在接口层,它还是以二进制形式发送的!无需转换。 :D
  • @vanneto 如果你是socket_write($fp, 15),它将与socket_write($fp, "15") 相同,即发送字节 0x31 0x35 而据我所知,他想发送一个字节 0x0F
  • 是的,很抱歉让您感到困惑。我想发送数据的单字节表示。我正在做 socket_write($sock, 15) 它正在发送两个字节,这让我感到困惑。

标签: php sockets binary


【解决方案1】:

使用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
    • 嗯,这是无符号小端 16 位整数的正确二进制表示。此外,C 对大于 255 的数字无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2020-09-08
    • 2012-08-23
    • 2013-08-21
    • 2012-10-11
    • 1970-01-01
    相关资源
    最近更新 更多