【问题标题】:how to send and receive hex using socket in php?如何在 php 中使用套接字发送和接收十六进制?
【发布时间】:2013-07-15 02:15:16
【问题描述】:

我有以下代码:

$send1 = 0x01;
$send2 = 0x03;
$send3 = 0x00;
$send4 = 0x00;

然后我这样发送:

socket_write($spawn, $send1, strlen ($send1)) or die("Could not write output\n");
socket_write($spawn, $send2, strlen ($send2)) or die("Could not write output\n");
socket_write($spawn, $send3, strlen ($send3)) or die("Could not write output\n");
socket_write($spawn, $send4, strlen ($send4)) or die("Could not write output\n");

接收方是这样得到的:

$result = socket_read ($socket, 1024) or die("Could not read server response\n");
    echo "Reply From Server  :".$result;

接收到的数据是:1300,如何在php中使用socket发送和接收hex?

【问题讨论】:

    标签: php sockets hex


    【解决方案1】:

    PHP 没有内置的十六进制数据类型,所以当你这样做时:

    $send1 = 0x01;
    

    这被 php 视为整数。 (试试 var_dump(0x01) 你会得到 int(1)) 因此,您可以将数据作为字符串发送并在接收端进行处理,如下所示:

    $send1 = "0x01";
    $send1 = "0x02";
    $send1 = "0x03";
    $send1 = "0x04";
    

    或者您可以通过套接字发送整数值,然后将它们转换为十六进制值以便在接收端进行处理:

    $send1 = 1;
    $send2 = 2;
    $send3 = 3;
    $send4 = 4;
    

    在接收端:

    var_dump(dec2hex($result));
    

    (一次处理一个输入,以便您可以将它们分开)。

    【讨论】:

    • 但是 $send2 = "0xCD" 呢,如何接收并转换成十六进制呢?
    • 第二次想到,我意识到代码是以十六进制开头的值发送的。所以 var_dump(0x01) 给出 int(1) 并且 var_dump(0xcd) 给出 int(205)。您可能想尝试发送如下内容: $send1 = 0xcd; (只有一个值),看看你在接收端得到了什么。如果您确实在接收端获得了一个十六进制值,那么您需要做的就是在每个十六进制值之后添加一个分隔符(例如 | 例如,),然后在该分隔符上拆分接收端的十六进制输入以进行进一步处理.我希望这一切都有意义。
    猜你喜欢
    • 2015-11-11
    • 2017-08-27
    • 1970-01-01
    • 2012-06-03
    • 2017-09-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多