找回密码
 加入
搜索
查看: 2128|回复: 7

[网络通信] [已解决]TCPSend发送16进制数据

[复制链接]
发表于 2019-3-7 15:31:41 | 显示全部楼层 |阅读模式
本帖最后由 dpale 于 2019-3-8 10:19 编辑


解决方法在7楼 。。。。

需要发送的数据
$str =  "AA 01 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC"

[/code]需要怎么处理才能发送过去,前面建立TCP Socket 省略
TCPSend($iSocket, $str)

我用matlab发送 设备有反应
str = 'AA 01 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC'
str2 = regexp(str, ' ', 'split');
num = hex2dec(str2)
st = tcpip('ip', 4196)
fopen(st)
fwrite(st, num)
fclose(st)

不知道TCPSend怎么发送这样的数据
发表于 2019-3-8 01:57:53 | 显示全部楼层
本帖最后由 gyp2000 于 2019-3-8 03:54 编辑

可以这样写:
$str = "AA 01 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC"
$str2 = StringSplit($str, " ", 2)
$num = ""
For $i = 0 To UBound($str2) - 1
        $num &= Chrw(Dec($str2[$i]))
Next
TCPSend($iSocket, $num)
这个发送数据没问题 不过如果你接收也挨个转 ASCII 字符 那就会出错,
ASC函数只能处理 (0-127)之间的字符,170的话就会溢出,转换成97。
如果你一定要转换,那就需要用函数ASCW来转换,会得到170这个值。
最靠谱的办法,最好还是转换成二进制发送,这样减少了很多转换上的麻烦。
 楼主| 发表于 2019-3-7 17:03:59 来自手机 | 显示全部楼层
通过抓包软件比较了一下 au3tcpsend将所有的字符都依次转换为ASCII码发送 比需要发送的数据多了很多 这个怎么组织数据 求大佬们帮助
 楼主| 发表于 2019-3-7 18:03:04 来自手机 | 显示全部楼层
一个思路是转换aa为ascii表对应的字符 但是发送后会发生变化 本来170对应的字符变成97对应的字符
发表于 2019-3-7 22:01:42 | 显示全部楼层
$binary =Binary('0x' & 'AA012001000000000000000000000000000000000000000000CC')
$send  = StringTrimLeft($binary,2)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $send = ' & $send & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

$recive = Binary('0x' & $send)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $recive = ' & $recive & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
发表于 2019-3-8 07:37:13 | 显示全部楼层
gyp2000 发表于 2019-3-8 01:57
可以这样写:
$str = "AA 01 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC" ...

感谢G大,我们用它给网络端口的设备发指令,设备只识别16进制,用chrw的话"AA"和"CC"实际发送的也与预期不符(分别是61和a8)如果知道十六进制对应的传输编码,有没有可能直接发送翻译好的二进制数据代替十六进制让设备识别?
 楼主| 发表于 2019-3-8 10:17:54 | 显示全部楼层
gyp2000 发表于 2019-3-8 01:57
可以这样写:
$str = "AA 01 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC" ...

感谢启发
最后的解决方法如下
$str = 'AA 01 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CC'
$str2 = stringreplace(str, ' ', '')
$bin = binary("0x" & str2)
tcpsend($isocket, $bin)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 21:45 , Processed in 0.080037 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表