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
到此,相信大家应该可以很容易实现任意数据类型的传递以及在上位机中准确显示了!
事实上在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
到此,相信大家应该可以很容易实现任意数据类型的传递以及在上位机中准确显示了!
相关文章推荐
- JAVA字节数据与JAVA类型的转换
- JAVA IO流实现字节数组与任何基本类型和引用类型的相互转换
- 将Long类型字节大小数据转换成标准的视频大小格式
- C++ 数据类型转换,常见函数实现
- C++中sprintf实现将一个基本数据类型的数组转换成字符串
- 字节类型的数据转换为16进制的字符串
- Java基础小知识——基本数据类型和字符串以及字节数组的转换
- Java基础小知识——基本数据类型和字符串以及字节数组的转换
- 将基础数据类型与字节数组相互转换
- java编程如何实现多条2017-01-16 22:28:11.0这样的时间数据,转换成Date类型Mon Jan 16 22:28:11 CST 2017这样的时间数据
- 【java基础】在Java中实现基本数据类型与字符、字符串之间的转换
- 采用扩展方法实现数组中数据类型转换(c#)
- Java中不同转换符实现不同数据类型到字符串的转换
- 包装类来实现基本数据类型与字符串类型之间的转换:
- 关于OpenCV中利用函数cvConvert实现图像数据类型转换(8U->16S)
- SQL Server 中,实现 varbinary 与 varchar 类型之间的数据转换
- 怎样在Java中实现基本数据类型与字符之间的转换
- 报错:对象必须实现 IConvertible;以分隔符进行分割链接concat_ws的使用方法;mysql数据类型转换cast,convert
- java字节分割转换 数据类型转换 文件输入流
- Java中的移位操作以及基本数据类型转换成字节数组【收集】