主题:Winsock getdata的问题
ben_lee
[专家分:0] 发布于 2008-12-08 13:53:00
我用Winsock控件进行收发包。
Client端发:
B=CREATEBINARY(CHR(0x00))+CHR(0x78)+CHR(0xa4)+CHR(0x05)) && 0h0078A405
ThisForm.tcpClient.Object.SendData(B)
Server端收:
strData = SPACE(256)
This.Object.GetData(@strData)
问题是收到后的数据strData=" x?",用CreateBin(strData)转bin后成了 0h00783F
请问各位高手,如何解决呀??
我发现CREATEBINARY(CHR(0x[color=FF0000]81[/color])) 红色的值>=81时,接收到的都是0h3F
最后更新于:2008-12-08 17:30:00
回复列表 (共4个回复)
沙发
hw2007name [专家分:4790] 发布于 2008-12-08 14:08:00
你发的CHR(0x00))+CHR(0x78)+CHR(0xa4)+CHR(0x05)字符就是"x?"啊,还用转换吗?
你看一下VFP9帮助
CREATEBINARY(cExpression)
参数
cExpression
希望转换的字符表达式。
返回值
字符型
说明
在 Visual FoxPro 中,二进制数据可以包含在字符串中。但 ActiveX 控件和 OLE 对象中的字符串 (OLE VT_BSTR 数据类型) 不能包含二进制数据。ActiveX 控件和 OLE 对象通过 VT_UI1 类型数组与 Visual FoxPro 传递二进制形式的数据。
ActiveX 控件和 OLE 对象通过 VT_UI1 类型的数组将二进制数据传递给 Visual FoxPro后。Visual FoxPro 自动将它转换为 Visual FoxPro 字符串的形式,但 Visual FoxPro 内部会把由 ActiveX 控件和 OLE 对象传递来的字符串标记为二进制字符串。当需要把数据传回 ActiveX 控件和 OLE 对象时,Visual FoxPro 再自动将它们转换为 VT_UI1 类型的数组。
如果您需要把一个 Visaul FoxPro 字符串传递给 ActiveX 控件和 OLE 对象,您必须首先使用 CRETEBINARY()函数将它转换为二进制字符串形式。CRETEBINARY()的缩写不能少于 7 个字符。
有关 ActiveX 控件和 automation 对象的更多信息,请参阅共享信息和添加 OLE。
板凳
ben_lee [专家分:0] 发布于 2008-12-08 15:21:00
谢谢您的回复,我的SERVER端是要从收到的十六进制串中解包的,需要的就是0h的发送原值。
3 楼
lidong883545 [专家分:20] 发布于 2008-12-31 12:08:00
我也出现过类似的问题(提问贴:在Foxpro中如何用Mscomm发送16进字符A9? ),估计在FOXPRO中很难发送十六进制串,我后来用VB轻松解决了问题。
4 楼
zfh630528 [专家分:130] 发布于 2009-01-01 20:59:00
在“提问贴:在Foxpro中如何用Mscomm发送16进字符A9? ”中我已经回复了,VFP9.0下是可以用Mscomm发送16进字符A9这样的字符的,在其它版本中没有试过。如:Thisform.olecontrol1.Output=0hA9,发送出去的就是16进字符A9,在A9前加上“0h”即可。
本人用VFP9.0的Mscomm与单片机通信已经成功地发送了“A9”。
我来回复