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

lipingzhy 2009-04-21 04:30:56
php 如何向串口发十六进制数?
...全文
450 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Steve 2009-04-22
  • 打赏
  • 举报
回复
找个监视COM端口的程序看看发的是什么就行了.
估计你的程序别的地方有问题.
光说"不行",是什么地方"不行"?
Steve 2009-04-22
  • 打赏
  • 举报
回复
ok,没问题了.
surfchen 2009-04-22
  • 打赏
  • 举报
回复
因为你已经人工地把十六进制转为十进制了。我没说你上面所发的ord的结果是错误的。只是说十六进制不需要人工转为十进制再用ord,完全可以用\x的方式。
Steve 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 surfchen 的回复:]
首先你对数据的理解不够准确。没有发十六进制数一说。数据只有一种,十六进制只不过是数据的一种方便人类阅读的外在表现。

其次,chr传入的是一个十进制的数字,返回该十进制数字所代表的binary(当然你说ascii也行,但是这不准确)。而PHP里十六进制的处理应该是这样:$data="\x58\xff\xff\x11\x45";
[/Quote]

如果解释以下程序输出结果相同?

<?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";

?>
surfchen 2009-04-22
  • 打赏
  • 举报
回复
首先你对数据的理解不够准确。没有发十六进制数一说。数据只有一种,十六进制只不过是数据的一种方便人类阅读的外在表现。

其次,chr传入的是一个十进制的数字,返回该十进制数字所代表的binary(当然你说ascii也行,但是这不准确)。而PHP里十六进制的处理应该是这样:$data="\x58\xff\xff\x11\x45";
Steve 2009-04-22
  • 打赏
  • 举报
回复
既然你有测试工具,那么发送出去的是什么呢?
lipingzhy 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 runffer_yang 的回复:]
找个监视COM端口的程序看看发的是什么就行了.
估计你的程序别的地方有问题.
光说"不行",是什么地方"不行"?
[/Quote]
我有测试工具,数据能发出去,指示灯亮,如果发送的十六制数正确是58 ff ff 11 45 ,它也会有一个反馈信息,指示灯会这。
现在是我能发出去。但收不到反馈信息,那说明发送的数不是十六制数58 ff ff 11 45
lipingzhy 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lipingzhy 的回复:]
引用 3 楼 runffer_yang 的回复:
没用,把58等转换成ASCII字符再发.
比如$data = "";
$data .= chr(98);
$data .= chr(255);
$data .= chr(255);
$data .= chr(17);
$data .= chr(69);

我试试看
[/Quote]
好像不行哟!!不知道是以十六进制发出去的。
lipingzhy 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 runffer_yang 的回复:]
没用,把58等转换成ASCII字符再发.
比如$data = "";
$data .= chr(98);
$data .= chr(255);
$data .= chr(255);
$data .= chr(17);
$data .= chr(69);
[/Quote]
我试试看
Steve 2009-04-21
  • 打赏
  • 举报
回复
没用,把58等转换成ASCII字符再发.
比如$data = "";
$data .= chr(98);
$data .= chr(255);
$data .= chr(255);
$data .= chr(17);
$data .= chr(69);
lipingzhy 2009-04-21
  • 打赏
  • 举报
回复

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


应该网 2009-04-21
  • 打赏
  • 举报
回复
如果是串口编程,一般要加载php_dio.dll(在php.ini中)

给出一个官方的地址,自己去找合适的版本吧。

http://snaps.php.net/win32/

pecl5.2-win32-latest.zip

然后用dio_write函数就可以了。

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧