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

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

概述对于单片机软件工程师在设计上下位机通讯时,经常会遇到这样一个问题,那就是如何传递一个float或者说是double或者是long 类型的数据,这些数据是由多个字节组成的,那么符合实现发送和在vb6中接收,以及将数据还原是个问题。 事实上在C/C++中要实现很简单,只要通过指针和字节访问即可! 下面来看一个使用Turbo C 2.0做的例子: #include<stdio.h> #include<s

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

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

总结

以上是内存溢出为你收集整理的VB6 实现从字节到具体数据类型的转换全部内容,希望文章能够帮你解决VB6 实现从字节到具体数据类型的转换所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1286283.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存