回家后电脑终于可以用了,可以不用再转贴了,可以写写自己开发工作中发现和体会的一些东西。
这几天在弄传真接收的问题,本来VC制作倒是简单一些,一个BYTE一个BYTE的读取传真页面数据,碰到需要转义的0X88可以轻松设置标志量,随便过滤后面的数据。
可是现在使用VB,这就有些头痛了,VB是不能一个BYTE编程读取得,使用MSComm 控件只能是CommData = MSComm1.Input,而二进制数据读取更麻烦一点Dim Buffer as Variant Dim Arr() as Byte \’设定并打开端口 MSComm1.CommPort = 1 MSComm1.PortOpen = True \’设定 InputMode 读取二进制数据
MSComm1.InputMode = comInputModeBinary \’等待直到输入缓冲区有 10 个字节 Do Until MSComm1.InBufferCount < 10 DoEvents Loop \’往缓冲区存二进制数据 Buffer = MSComm1.Input \’赋值于字节数组以便处理 Arr = Buffer
而这个内容送上来的长度是没有办法由程序决定,所以必须处理这个段的BYTE数据,由于不想使用这个数组遍历判断是否含有结束标志,所以利用VB的UNICODE性质,不会象ANSI字符串一样把0X00当作结束符,想投机取巧一把。
dim s as string StrConv(Arr,vbUnicode),然后再定义一个string,等于chr(10)+chr(13),然后就用instr(s,ss)来判断,感觉效果还不错,因此就用了,后来发现由于送上来的数据的长度不一定,有可能10是上一个数据帧的最后一个,而13是下一个数据帧的第一个。于是就写了 right(s,1)和left(s,1)= 来做判断,这下可真是害人啊。
不知道为什么,有时候这样是可以得,有时候却又是错误的。取得字符不是想象中的数据,而是0X00,或者是别的数据。真是莫名其妙。今天突然出现接收的传真页面丢失大半的情况。
Dim n() As Byte Dim s Dim b(2) As Byte b(0) = &H2 b(1) = &H3 b(2) = &H4 b(3) = &H5 s = b n = s Dim m As String m = StrConv(n, vbUnicode) Dim nnn() As Byte nnn = m Debug.Print Right(m, 1), Asc(Right(m, 1)) If Right(m, 1) = Chr(5) Then Debug.Print "sdfsd" End If
今天上午和下午在公司调试了半天,都是不能正常判断,然而晚上在家里却又能正常判断出来,真是莫名其妙。如果明天天气好,再到公司里面试一试。同样都是WINXP的系统,VB6中文版+SP6中文。
Dim df As String df = RightB(ooo, 1) If (RightB(ooo, 1)) = ps10 Then 这个判断总是失败
历史博文
- 20080929 c# asp.net host - 2009
- 20070824 gdb remote debug - 2008
- 1224 mcafee 进程 规则 - 2007
- 0218 yahoo spider faint robots - 2006
- 在 Internet Explorer 中使用 Windows 窗体控件 - 2005