求解一段代码的意思,在线等!!!

zhangwenqian 2010-05-24 11:02:48
Response = IIf(Val(Response) = 0, "&H00", "&H" & Mid(Response, 1, 2))
If (Response And &H40) <> &H40 Then
MsgBox "Please check the AC Power supply and the 12V/DC & 24V/DC Power Supply, or reboot the computer."
Call SendString(OmsHandle, "BH7 RS WQ")
cmdPowerOn.Enabled = True
cmdExit.Enabled = True
Exit Sub
End If

对于红色字体的部分不是很理解,谁能解释一下...
...全文
103 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenshantie 2010-05-25
  • 打赏
  • 举报
回复
关注中。。。。。
of123 2010-05-25
  • 打赏
  • 举报
回复
呵呵呵。

Response = IIf(Val(Response) = 0, "&H00", "&H" & Mid(Response, 1, 2)

这一句,作者原意是根据其原有值给 Response 重新赋值。规则是,如果是 0 或者非数值,Response = "&H00";否则取其前两字符并加前缀 "&H"。相当于:

If Val(Response) = 0 Then
Response = "&H00"
Else
Response = Left(Response, 2)
EndIf

但是,这里有两个大问题:
1 如果 Response 原来的值就是十六进制字符串,且大于等于 "A0",则一定被赋值为 "&H00"。
2 如果 Response 第一个字符是数字,第二个字符是非数字,例如 "2z",则将被赋值为 "&H2z"。

因此应该改为:

Response = Left(Response, 2)
Response = IIf(IsNumeric("&H" & Response), "&H" & Right("0" & Response, 2), "&H00" )

后一句,是判断 Response 中十六进制值的第 6 位(bit,我常在这里看到有人将位解释为字符或字节,特意说明)是否为 0。也应改为:

If (Val("&H" & Response) And &H40) <> &H40 Then

这里 bit 的编号是最低位从 0 编起。
chinaboyzyq 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhangwenqian 的回复:]
Response = IIf(Val(Response) = 0, "&H00", "&H" & Mid(Response, 1, 2))
If (Response And &H40) <> &H40 Then
[/Quote]
第一句:
如果Val(Response)等于0,那么Response ="&H00",
如果Val(Response) 不等于0,那么Response ="&H" & Mid(Response, 1, 2)
第二句:
如果Response与&H40按位与不等于&H40,那么...
只有Response第6位(底层二进制,从0位算起)是1的时候才会与出相等。
(比如Response=64、192等会与出相等,Response=0、128等会与出不等)。

在这里Response变量可以是variant、string、integer、long、byte等任意一种变量(能表示整型数),只要变量不溢出就行,运行时VB会自动强制转换并进行计算,所以说这里Response的数据类型并不是主要的。
hyyhvb 2010-05-24
  • 打赏
  • 举报
回复
第一句是将数值转换为16进制格式
后面是比较
hyyhvb 2010-05-24
  • 打赏
  • 举报
回复
判断原来的字符串变量Response值(16进制格式)是否为&H40
bcrun 2010-05-24
  • 打赏
  • 举报
回复
好像是判断原来的字符串变量Response值(16进制格式)的和&H40做与运算后是否为0
bcrun 2010-05-24
  • 打赏
  • 举报
回复
还是听5楼的话先把程序变量类型搞好吧,用不着省一个变量名却把程序搞乱了
zhangwenqian 2010-05-24
  • 打赏
  • 举报
回复
Response 是字符串啊
zhangwenqian 2010-05-24
  • 打赏
  • 举报
回复
继续关注
熊孩子开学喽 2010-05-24
  • 打赏
  • 举报
回复
你这个程序问题不小, 且看这两句:
Response = IIf(Val(Response) = 0, "&H00", "&H" & Mid(Response, 1, 2))
If (Response And &H40) <> &H40 Then

请问你这个Response变量到底是数字类型的还是字符类型的??
第一句作为字符串用,第二句又当成数字类型来比较.
这么乱来,即使VB不报错也不见得功能正常啊.
myy168 2010-05-24
  • 打赏
  • 举报
回复
貌似是十六进制的,我不太懂...

顶起,,,继续关注...

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧