VB6 实现从字节到具体数据类型的转换

6 篇文章 0 订阅
4 篇文章 0 订阅

对于单片机软件工程师在设计上下位机通讯时,经常会遇到这样一个问题,那就是如何传递一个float或者说是double或者是long 类型的数据,这些数据是由多个字节组成的,那么符合实现发送和在vb6中接收,以及将数据还原是个问题。

事实上在C/C++中要实现很简单,只要通过指针和字节访问即可!

下面来看一个使用Turbo C 2.0做的例子:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

void main()
{
   float fa,fb;
   unsigned char *pa,*pb;

   fa=3.14;
   fb=0;

   pa=&fa;
   pb=&fb;

   pb[0]=pa[0];
   pb[1]=pa[1];
   pb[2]=pa[2];
   pb[3]=pa[3];

   clrscr();
   printf("0x%x,0x%x,0x%x,0x%x=%f",pa[0],pa[1],pa[2],pa[3],fb);
   getch();
}

到此我们知道一个数据类新是如何在C中实现字节操作的,相信大家也应该知道怎么把一个float从串口中发送出去了吧,那么下面的工作就是如何在VB6中将收到的4个字节数据进行还原咯!

 

前面我们已经知道一个float类型的数据,当其值为3.14的时候,其值在内存中占据4个字节,其内容用十六进制表示为0xC3,0xF5,0x48,0x40

在vb中的代码实现如下:

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)   '内存拷贝
Private Declare Function VarPtr Lib "MSVBVM60.dll" (var As Any) As Long '指针操作

Private Sub Form_Load()
    Dim f As Single
    Dim b(4) As Byte
    b(0) = &HC3
    b(1) = &HF5
    b(2) = &H48
    b(3) = &H40
    CopyMemory ByVal VarPtr(f), b(0), 1      '类似于C中的指针操作,将数据填充到其对应的字节位置中
    CopyMemory ByVal VarPtr(f) + 1, b(1), 1
    CopyMemory ByVal VarPtr(f) + 2, b(2), 1
    CopyMemory ByVal VarPtr(f) + 3, b(3), 1
   
    MsgBox f
End Sub

 

 

 

到此,相信大家应该可以很容易实现任意数据类型的传递以及在上位机中准确显示了!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值