最近在做一个物联网的PHP项目,涉及用PHP发送16进制的指令数据,可把我蛋疼坏了,各种尝试无果,百度大把大把的文章看了不少,但问题始终没有解决!
描述:用PHP发送16进制指令,Socket服务器上接收到的必须是”AA 55 00 01 80 00 00“格式,但实际发送中,浏览器各种转码,空格给你转成20%!
BUT!!!
就在我快要放弃之时,偶然CSDN的一个帖子救了我!!!
大牛给出的解决方案是:
在每个16进制字符串前加“\x”。
示例:
一般:$cmd = "AA 55 00 01 80 00 00";//这种定义方式在发送的过程中被浏览器转了码,放弃!
大神:$cmd = "\xAA\x55\x00\x01\x01\x00\x00";//在每个16进制字符串前加了“\x”,Socket端成功接收到了16进制指令!
原理:巧妙的利用了转义字符!
转义字符
意义
ASCII码值(十进制)
\a
响铃(BEL)
007
\b
退格(BS) ,将当前位置移到前一列
008
\f
换页(FF),将当前位置移到下页开头
012
\n
换行(LF) ,将当前位置移到下一行开头
010</