什么“vb负数转换2字节”? 是 VB6整数转2字节吧!
其实可以直接运算的。
拆分:
Buffer(0) = Num And 255
Buffer(1) = (Num And &HFF00) \ 256 And 255合成:
If (Buffer(1) < 128) Then
Num = Buffer(1) * 256 Or Buffer(0)
Else
Num = (-256 Or Buffer(1)) * 256 Or Buffer(0)
End If
其实可以直接运算的。
拆分:
Buffer(0) = Num And 255
Buffer(1) = (Num And &HFF00) \ 256 And 255合成:
If (Buffer(1) < 128) Then
Num = Buffer(1) * 256 Or Buffer(0)
Else
Num = (-256 Or Buffer(1)) * 256 Or Buffer(0)
End If
(1) 负数如何转换成 4 个字节
strNum = Right("000" & Hex(-80), 4)
Buffer(0) = Asc(Mid(strNum, 1, 1))
Buffer(1) = Asc(Mid(strNum, 2, 1))
Buffer(2) = Asc(Mid(strNum, 3, 1))
Buffer(3) = Asc(Mid(strNum, 4, 1))(2) 4 个字节合成一个整数
Num = Val("&H" & Chr(Buffer(0)) & Chr(Buffer(1)) & Chr(Buffer(2)) & Chr(Buffer(3)))
Dim d(0 To 1) As StringPrivate Sub Form_Load()
MSComm1.PortOpen = True
order = 0MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
End Sub
Private Sub Timer1_Timer() Select Case order
Case 0
d(0) = Chr(2) + "0" + "0802" + "0A" + Chr(3) + "6E"
Case 1
d(1) = Chr(2) + "0" + "1002" + "0A" + Chr(3) + "67"
End Select
MSComm1.Output = d(order)Call Sleep(50)
End SubPrivate Sub MSComm1_OnComm()If MSComm1.CommEvent = comEvReceive ThenTimer1.Enabled = Falsea = Trim(MSComm1.Input)Select Case order
Case 0
Text1.Text = Text1.Text + a
order = 1
Case 1
Text2.Text = Text2.Text + a
order = 0
End Select
End If
Timer1.Enabled = True
End Sub
这段代码是我做了发送2种数据的情况,如果sleep设小了,发送一个指令时会在2个文本框里都有显示,数据接收太乱,如果设到50,1指令接到1文本框里,2指令接到2文本框里,有什么办法让它不延时,不停地接收,不同的指令显示在对应的文本框里。