VB中如何读取C语言中的共用体union

autumnspinage 2010-12-07 12:57:35
用VB与单片机进行RS232串口通信
单片机用C语言写的程序,用了一个共用体union,发送4个字节代表一个浮点数的值
VB写的程序来接收这个数据,如何才能将这个浮点数值读出?VB里没有union啊?
谢谢大家!
...全文
167 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishantian 2010-12-08
  • 打赏
  • 举报
回复
可以考虑现在单片机里将浮点数转换为字符串使用sprintf函数,然后将该字符串发送到VB上位机上去,再在VB中转换为浮点数,该方法非常简单实用,请你试一试。
ltpao 2010-12-07
  • 打赏
  • 举报
回复
union是同一段内存,VB可以定义不同的数据类型对此内存进行复制
现在还是人类 2010-12-07
  • 打赏
  • 举报
回复
你接收的时候按照字节流的方式接收,然后取出你下位机发送的字节内容不就可以了,
比如:

//...
union VBSingle
{
public:
unsigned char Byte1;
unsigned char Byte2;
unsigned char Byte3;
unsigned char Byte4;
}
//...
void COM_Event () interrupt 4
{
VBSingle SngTemp;
unsigned char dat = 0;
if(RI == 1){
dat = SBUF;
RI = 0;
//...
SendBuffToPort(SngTemp,4);
//...
}else{
TI = 0;
}
}
//...



Public Function ConnectPort(Optional hPort As Integer = 0) As Boolean
'...
On Error Resume Next
MSComm1.PortOpen = False
If Err.Number <> 0 Then
Err.Clear
End If
MSComm1.CommPort = X
MSComm1.Settings = 频率 & ",N,8,1"
MSComm1.PortOpen = True
If Err.Number <> 0 Then
GoTo 错误端口
End If
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeBinary
'...
End Function
Private Sub MSComm1_OnComm()
Dim TempBytes() As Byte
Dim sngTemp As Single
'...
On Error Resume Next
If MSComm1.CommEvent <> comEvReceive Then Exit Sub
ReadBytes = MSComm1.Input

'...
CopyMemory sngTemp,TempBytes(i),4 '这里将读到的数据放到Single类型变量里
'...
End Sub

7,763

社区成员

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

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