回家后电脑终于可以用了,可以不用再转贴了,可以写写自己开发工作中发现和体会的一些东西。 这几天在弄传真接收的问题,本来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 读取二进制数据 而这个内容送上来的长度是没有办法由程序决定,所以必须处理这个段的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 这个判断总是失败 字体:大 中 小 |
![]() | 永久地址 http://www.shengfang.org/blog/p/vbunicode1.php |
![]() | 引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1117202359 |
2005年5月27日21:59星期五 [Dev开发]






