浅议vb6字节数组和字符串的相互转换

浅议vb6字节数组和字符串的相互转换

ID:9064387

大小:57.50 KB

页数:6页

时间:2018-04-16

浅议vb6字节数组和字符串的相互转换_第1页
浅议vb6字节数组和字符串的相互转换_第2页
浅议vb6字节数组和字符串的相互转换_第3页
浅议vb6字节数组和字符串的相互转换_第4页
浅议vb6字节数组和字符串的相互转换_第5页
资源描述:

《浅议vb6字节数组和字符串的相互转换》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、浅议VB6字节数组和字符串的相互转换  一、前言  数据类型转换在编程中经常用到,VB6提供了一整套类型转换的函数。但是,在进行类型转换时,有时候仅仅依靠VB提供的函数是不能达到自己的目的的。因此,需要考虑用其他的方法来完成数据类型转换。本文仅谈VB6中字节数组和字符串的相互转换过程中应注意的问题及其解决办法。  在VisualBasic中使用Byte数组主要是为了32位API函数的参数传递和函数的返回。在32位的VisualBasic版本中,字符串被假定为Unicode字符,其中每个字符占用两个字节。系统自动地将Unicode的两个连续字节转换成1个字节的ANSI字符。但

2、是,如果该字符串包含二进制数据,其内容将变得很难理解。例如,一个汉字是两个字节,在VisualBasic6.0中的长度就只是1,这将给我们计算单个汉字的国标码带来一些麻烦。有了Byte数组,这些问题就将迎刃而解。  另外,VisualBasic中的字符串和C语言中的字符串有一些不同,本文将给出一个函数,把C字符串转换成VisualBasic字符串。  二、用Byte数组代替字符串  Byte数组包含的是0-255之间的ASCII码字符,它不会象字符串那样被系统作预处理。你可以在很多API函数中用来Byte数组代替字符串。  例如,下面的代码中用GetSystemDirect

3、ory这个WindowsAPI函数来取得Windows的系统路径。一共有两段代码,一段代码是传递一个字符串来存储函数返回的系统路径,另一段代码是传递一个Byte数组来代替字符串。  为了更好地比较,两段代码的不同部分都用黑体标出。读者可以仔细比较这两段代码的差异,这样您会更深入地理解Byte数组和字符串的差别。  把这两段代码的任何一段放入一个窗体中运行,但击窗体的空白区域,你将会在窗体中看到Windows的系统路径。  下面是使用字符串的代码:PrivateDeclareFunctionGetSystemDirectoryLib"kernel32"Alias_"GetSy

4、stemDirectoryA"(ByVallpBufferAsString,ByValnSizeAsLong)AsLongPrivateSubForm_Click() DimnAsInteger DimstrAsString str=Space$(256) n=GetSystemDirectory(str,256) str=Left$(str,n) PrintstrEndSub  在上面这段代码中,字符串参数lpBuffer返回Windows的系统路径。在函数调用之前,将变量预定义成256个字符,并在函数返回时清除多余的字符。  注意:  在调用API函数之前,通常都需要预

5、先定义一个字符串或者Byte数组以供API函数存储数据。应该养成这种良好的编程习惯。否则,你的程序有可能崩溃,甚至导致你的系统崩溃。  下面是使用Byte数组的代码:PrivateDeclareFunctionGetSystemDirectoryLib"kernel32"Alias_"GetSystemDirectoryA"(ByReflpBufferAsByte,ByValnSizeAsLong)AsLongPrivateSubForm_Click() DimnAsInteger DimBuffer()AsByte DimstrAasString Buffer=Space

6、$(256) n=GetSystemDirectory(Buffer(0),256) strA=StrConv(Buffer,vbUnicode) strA=Left$(strA,n) PrintstrAEndSub  不知道读者注意到没有,第二段代码中的GetSystemDirectoryAPI函数的声明已经改变了。第一个参数的声明由一个ByVal字符串变成了一个ByRef的Byte数组,即由声明:ByVallpBufferAsString  变成了:ByReflpBufferAsByte  传递字符串时,需要一个ByVal修饰符来把字符串缓冲区传递到API函数中,因为字

7、符串变量实际上指示了字符串内容所在的内存地址。在C语言术语中,这代表了一个指向指针的指针。ByVal意味着被传递的是一个指向实际字符串内容的内存地址。而在传递Byte数组Buffer(0)时,使用ByRef修饰符来传递变量,它相当于传递了数组中第一个字节内容的地址。事实上,这两种结果是一样的。strA=StrConv(Buffer,vbUnicode)  这行代码把Byte数组的二进制数据转换成一个合法的VisualBasic字符串。  三、Byte数组和字符串之间的赋值  为了简化Byte数组和字符串之间的数据传

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。