回 帖 发 新 帖 刷新版面

主题:Winsock getdata的问题

我用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


回复列表 (共4个回复)

沙发

你发的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。

板凳

谢谢您的回复,我的SERVER端是要从收到的十六进制串中解包的,需要的就是0h的发送原值。

3 楼

我也出现过类似的问题(提问贴:在Foxpro中如何用Mscomm发送16进字符A9? ),估计在FOXPRO中很难发送十六进制串,我后来用VB轻松解决了问题。

4 楼

在“提问贴:在Foxpro中如何用Mscomm发送16进字符A9? ”中我已经回复了,VFP9.0下是可以用Mscomm发送16进字符A9这样的字符的,在其它版本中没有试过。如:Thisform.olecontrol1.Output=0hA9,发送出去的就是16进字符A9,在A9前加上“0h”即可。
本人用VFP9.0的Mscomm与单片机通信已经成功地发送了“A9”。

我来回复

您尚未登录,请登录后再回复。点此登录或注册