您的位置:首页 > 编程语言 > VB

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

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



到此,相信大家应该可以很容易实现任意数据类型的传递以及在上位机中准确显示了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐