好吧,我想你可以读取ASCII部分,因为你设置了InputMode = comInputModeText
。取而代之的是,设置InputMode = comInputModeBinary
。
正如另一个答案已经提到,声明此功能:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
比方说您收到这样的缓冲作为你的input
:
Dim buf(0 To 10) As Byte
' receiving...
buf(0) = &H62
buf(1) = &H69
buf(2) = &H6E
buf(3) = &H61
buf(4) = &H72
buf(5) = &H79
buf(6) = &H8
buf(7) = &HD0
buf(8) = &HF
buf(9) = &H49
buf(10) = &H40
你的第一个值是6个字节长,你可以将它转换为一个字符串,你的第二个值是1个字节长,所以你可以将它转换为一个字节(或者整数或长整数,无论你想要什么)。你的产值是4个字节长,所以它将适合一个单一的。
Dim t as String, b As Byte, s As Single
t = StrConv(LeftB(buf, 6), vbUnicode)
Call CopyMemory(VarPtr(b), VarPtr(buf(6)), 1)
Call CopyMemory(VarPtr(s), VarPtr(buf(7)), 4)
Debug.Print t, b, s ' will print binary 8 3,14159
只要将所有内容都视为二进制,ASCII对二进制字节值来说只是一个常见的情况。谷歌“VB6转换字节为单一”,很多很多点击。 –
你已经设置了'InputMode = comInputModeText'? – deblocker