VB6 MSComm混合ASCII和二进制

VB6 MSComm混合ASCII和二进制,com,binary,vb6,type-conversion,ascii,Com,Binary,Vb6,Type Conversion,Ascii,试图从将以ASCII和二进制混合格式发送回我的设备检索数据。我可以读取字符串的ASCII部分,但无法将二进制转换为数字(以IEEE浮点形式发送) 我收到:6个ASCII字节,然后是5个二进制字节,第一个二进制字节是1到6之间的整数,接下来的4个表示IEEE浮点数。现在忽略浮点,我正在努力将我的第7个字节转换成一个整数,它是作为ASCII字符串从控件返回的。如果我能做到这一点,a应该能够对最后四个字节应用相同的主体来获得我的浮点数 在读取二进制数据之前,我曾尝试更改COM控件的InputMode,

试图从将以ASCII和二进制混合格式发送回我的设备检索数据。我可以读取字符串的ASCII部分,但无法将二进制转换为数字(以IEEE浮点形式发送)

我收到:6个ASCII字节,然后是5个二进制字节,第一个二进制字节是1到6之间的整数,接下来的4个表示IEEE浮点数。现在忽略浮点,我正在努力将我的第7个字节转换成一个整数,它是作为ASCII字符串从控件返回的。如果我能做到这一点,a应该能够对最后四个字节应用相同的主体来获得我的浮点数

在读取二进制数据之前,我曾尝试更改COM控件的InputMode,但这似乎不起作用-这是否允许,我不确定


有什么建议吗

尝试以下方法:将数据作为字节数组读入变量,然后将这些部分分别复制到不同的字节数组中。第一个段可以使用
StrConv
转换为字符串,第二个段可以通过简单赋值(
MyInt=CInt(byt(x)
)转换为整数,其余的段可以使用
CopyMemory
复制到浮点(如果整数字节是ASCII,则改为
MyInt=Asc(byt(x))
)好的,我想您可以阅读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)
假设您收到一个缓冲区,作为您的
输入

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字节长,因此您可以将其转换为字节(或者转换为整数或长,随您所需)。您的tirth值是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只是二进制字节值的常见情况。Google“vb6将字节转换为单字节”你是否设置了
InputMode=comininputmodetext
?你写了
float
,但我相信它一定是一个
单曲
-无论如何,我支持你的观点suggestion@deblocker右-
single
在VB=
float
中,在大多数其他上下文中。只是同一事物的不同名称。