比如用MSCOMM通信后得到一個16進制數值如“41 0C 0F A0”,要怎樣才能將其處理成正常的發動機轉速呢?求具體程式,謝謝
uj5u.com熱心網友回復:
你確定收到的是一個字串(你是用 comInputModeText 模式,或者說沒有設定 InputMode = comInputModeBinary)?你確定每兩個字符之間是用一個空格分隔的?
你要轉換成的轉速數值是什么資料型別,是 Long?
Dim strData As String, lngData As Long
strData = "41 0C 0F A0"
strData = Replace(strData, " ", "")
lngData = CLng("&H" & strData)
uj5u.com熱心網友回復:
收到的是一個十六進制的陣列,用的是16進制模式,轉速數值型別的話Long和integer應該都可以的,我想要的是“如何用VB處理一個用MSCOMM通信收到的十六進制陣列,把他轉換成Long或Integer型別”這樣的程式編碼,您能夠幫幫我嗎?uj5u.com熱心網友回復:
這里所謂16進制其實質是2進制,可參考:將Long型別轉換成Byte位元組型別陣列及反轉
[code=vbOption Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Dim Buffer(3) As Byte
Private Sub LngToBin_Click()
Dim i As Integer
Dim hexData As String
Dim a As Long
a = Val(Text1)
CopyMemory Buffer(0), a, 4
For i = 0 To UBound(Buffer)
Debug.Print Buffer(i)
Next
End Sub
Private Sub BinToLng_Click()
Dim sinStr As String
Dim sinSj As Long
Dim i As Integer
CopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0)), 4
Text2 = sinSj
End Sub
Private Sub Form_Load()
Text1 = ""
Text2 = ""
End Sub ][/code]
uj5u.com熱心網友回復:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Dim Buffer(3) As Byte
Private Sub LngToBin_Click()
Dim i As Integer
Dim hexData As String
Dim a As Long
a = Val(Text1)
CopyMemory Buffer(0), a, 4
For i = 0 To UBound(Buffer)
Debug.Print Buffer(i)
Next
End Sub
Private Sub BinToLng_Click()
Dim sinStr As String
Dim sinSj As Long
Dim i As Integer
CopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0)), 4
Text2 = sinSj
End Sub
Private Sub Form_Load()
Text1 = ""
Text2 = ""
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/122848.html
標籤:網絡編程
