php 如何向串口发十六进制数?

解决方案 »

  1.   

    如果是串口编程,一般要加载php_dio.dll(在php.ini中) 给出一个官方的地址,自己去找合适的版本吧。http://snaps.php.net/win32/pecl5.2-win32-latest.zip然后用dio_write函数就可以了。
      

  2.   


    如果我要发的十六进制是 58 ff ff 11 45
    我发的时候直接  dio_write($fd,'58 ff ff 11 45')这样用吗?
      

  3.   

    没用,把58等转换成ASCII字符再发.
    比如$data = "";
    $data .= chr(98);
    $data .= chr(255);
    $data .= chr(255);
    $data .= chr(17);
    $data .= chr(69);
      

  4.   

    找个监视COM端口的程序看看发的是什么就行了.
    估计你的程序别的地方有问题.
    光说"不行",是什么地方"不行"?
      

  5.   

    我有测试工具,数据能发出去,指示灯亮,如果发送的十六制数正确是58 ff ff 11 45 ,它也会有一个反馈信息,指示灯会这。
    现在是我能发出去。但收不到反馈信息,那说明发送的数不是十六制数58 ff ff 11 45 
      

  6.   

    首先你对数据的理解不够准确。没有发十六进制数一说。数据只有一种,十六进制只不过是数据的一种方便人类阅读的外在表现。其次,chr传入的是一个十进制的数字,返回该十进制数字所代表的binary(当然你说ascii也行,但是这不准确)。而PHP里十六进制的处理应该是这样:$data="\x58\xff\xff\x11\x45";
      

  7.   


    如果解释以下程序输出结果相同?<?php
    $data="\x58\xff\xff\x11\x45";for ($i=0; $i<strlen($data); $i++)
    {
      echo ord($data[$i]);
      echo " ";
    }
    echo "\n";$data = "";
    $data .= chr(98); 
    $data .= chr(255); 
    $data .= chr(255); 
    $data .= chr(17); 
    $data .= chr(69); for ($i=0;$i<strlen($data);$i++)
    {
      echo ord($data[$i]);
      echo " ";
    }
    echo "\n";?>
      

  8.   

    因为你已经人工地把十六进制转为十进制了。我没说你上面所发的ord的结果是错误的。只是说十六进制不需要人工转为十进制再用ord,完全可以用\x的方式。