workerman和C++socket通信发送和接收数据不一样

stroller

刚刚接触PHP,workerman通过tcp发送数字0,接收到数据却是48
[attach]1609[/attach]

[attach]1610[/attach]
可能很基础但却是搞不清楚,谢谢大家了

阅读 1747
1个回答

blogdaren

workerman发送的数字0是当作字符0发送的, C++客户端 (char ) p 接收到的就是对应的字符,所以强制转换成整型指针 (int ) p 后, printf("%d", *p) 输出的就是字符 0 对应的十进制数48, 所以:不要转换,直接 printf("%s", p)  就可以了。

  • stroller 2019-01-04

    那如何直接发送数字0呢?只能通过强制转换吗?

  • blogdaren 2019-01-04

    1、workerman的send($data) 其中 $data 参数最终都会被当做字符串来处理了,所以强制转换是没用的。
    2、如果想传递整数,考虑使用php的pack函数将整数打包到二进制发送,这样C++客户端按照你一开始的方法读取就可以了,注意字节序即可。