浅议VB6字节数组和字符串的相互转换
日期:2007年6月7日 作者: 相关tags: 浅议 VB 字节 数组 字符串 相互 转换-
一、 前言
- [1] [2] [3] [4] 下一页
- 完全手册Excel VBA典型实例全集:通过368个例子掌握
- 风玩转MP3:使用Monkeys Audio转换APE为MP3
- 剖析从VB转型到VB.NET的必要性
- 用VB6.0编写客户端自动升级程序
- VB设计有语音报时和报警功能的闹钟
- 如何在VB例程中接收自定义消息
- 把中文字符转换成Utf8编码
- 用VB6.0编写电脑抽奖程序
- 狸窝PPT转换器(ppt转换成视频) 优化安装版 V2.1.0.54
- All Office Converter 文件格式转换器下载 免费中文版 V2011.7
- 手机RMVB播放器 s60v5
- 私房iPhone4视频格式转换器iPhone专业版
- 万能flv转mp4/avi/3gp格式转换器(视频转换压缩器) V10.0.3 中文版
- NAT地址转换进阶
- MP3压缩大师 全能音频转换+音乐减肥版 5.0
- 宽网多媒体FLV转换器 2.80
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
数据类型转换在编程中经常用到,VB6提供了一整套类型转换的函数。但是,在进行类型转换时,有时候仅仅依靠VB提供的函数是不能达到自己的目的的。因此,需要考虑用其他的方法来完成数据类型转换。本文仅谈VB6中字节数组和字符串的相互转换过程中应注意的问题及其解决办法。
在Visual Basic中使用Byte数组主要是为了32位API函数的参数传递和函数的返回。在32位的Visual Basic版本中,字符串被假定为Unicode字符,其中每个字符占用两个字节。系统自动地将Unicode的两个连续字节转换成1个字节的ANSI字符。但是,如果该字符串包含二进制数据,其内容将变得很难理解。例如,一个汉字是两个字节,在Visual Basic 6.0中的长度就只是1,这将给我们计算单个汉字的国标码带来一些麻烦。有了Byte数组,这些问题就将迎刃而解。
另外,Visual Basic中的字符串和C语言中的字符串有一些不同,本文将给出一个函数,把C字符串转换成Visual Basic字符串。
二、 用Byte数组代替字符串
Byte数组包含的是0-255之间的ASCII码字符,它不会象字符串那样被系统作预处理。你可以在很多API函数中用来Byte数组代替字符串。
例如,下面的代码中用GetSystemDirectory这个Windows API函数来取得Windows的系统路径。一共有两段代码,一段代码是传递一个字符串来存储函数返回的系统路径,另一段代码是传递一个Byte数组来代替字符串。
为了更好地比较,两段代码的不同部分都用黑体标出。读者可以仔细比较这两段代码的差异,这样您会更深入地理解Byte数组和字符串的差别。
把这两段代码的任何一段放入一个窗体中运行,但击窗体的空白区域,你将会在窗体中看到Windows的系统路径。
下面是使用字符串的代码:
Private Declare Function GetSystemDirectory Lib "kernel32" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Click()
Dim n As Integer
Dim str As String
str = Space$(256)
n = GetSystemDirectory(str, 256)
str = Left$(str, n)
Print str
End Sub
在上面这段代码中,字符串参数lpBuffer返回Windows的系统路径。在函数调用之前,将变量预定义成256个字符,并在函数返回时清除多余的字符。
注意:
在调用API函数之前,通常都需要预先定义一个字符串或者Byte数组以供API函数存储数据。应该养成这种良好的编程习惯。否则,你的程序有可能崩溃,甚至导致你的系统崩溃。
下面是使用Byte数组的代码:
Private Declare Function GetSystemDirectory Lib "kernel32" Alias _
"GetSystemDirectoryA" (ByRef lpBuffer As Byte, ByVal nSize As Long) As Long
Private Sub Form_Click()
Dim n As Integer
Dim Buffer() As Byte
Dim strA as String
Buffer=Space$(256)
n = GetSystemDirectory(Buffer(0), 256)
strA=StrConv(Buffer,vbUnicode)
strA = Left$(strA, n)
Print strA
End Sub
不知道读者注意到没有,第二段代码中的GetSystemDirectory API函数的声明已经改变了。第一个参数的声明由一个ByVal字符串变成了一个ByRef的Byte数组,即由声明:
