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

对于单片机软件工程师在设计上下位机通讯时,经常会遇到这样一个问题,那就是如何传递一个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=%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

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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...