1 / 8
文档名称:

浅议VB6字节数组和字符串的相互转换.doc

格式:doc   大小:1,829KB   页数:8页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

浅议VB6字节数组和字符串的相互转换.doc

上传人:儒林 2022/5/18 文件大小:1.79 MB

下载得到文件列表

浅议VB6字节数组和字符串的相互转换.doc

文档介绍

文档介绍:浅议VB6字节数组和字符串的相互转换
浅议VB6字节数组和字符串的相互转换
  一、 前言
  数据类型转换在编程中经常用到,VB6提供了一整套类型转换的函数。但是,在进行类型转换时,有时候仅仅依指向指针的指针。ByVal意味着被传递的是一个指向实际字符串内容的内存地址。而在传递Byte数组Buffer(0)时,使用ByRef修饰符来传递变量,它相当于传递了数组中第一个字节内容的地址。事实上,这两种结果是一样的。
strA=StrConv(Buffer,vbUnicode)
  这行代码把Byte数组的二进制数据转换成一个合法的Visual Basic字符串。
  三、 Byte数组和字符串之间的赋值
  为了简化Byte数组和字符串之间的数据传递,允许你在任何动态Byte数组和任何字符串之间直接互相赋值。例如:
Buffer=strA
StrA=Buffer
  注意:
  当且仅当Byte数组是动态的,而不是固定大小时,你才可以把一个字符串直接赋给一个Byte数组。
  声明一个动态的Byte数组最简单的方法是在Dim语句中使用空参数,例如:
Dim Buffer() as Byte
  当你把一个字符串赋给一个动态Byte数组时,数组中的字符数将是字符串的字符数目的两倍。这是因为Visual Basic中字符串使用Unicode,并且每个Unicode字符的实际大小是两个字节。当把一个ASCII字符转换成一个Byte数组时,数组中的另一个字节将是0。
  向Unicode的转换是将每个在缓冲区中的字符转换成2个字节,从而实际上加倍了存储在结果字符串的中字节数目,当你认为函数Len(strA)得到的尺寸大小和Unicode转换后的Ubound(Buffer)函数所返回的尺寸大小相同时,上述特点就不很明显了。但是,函数LenB(strA)确实返回一个2倍于Len(strA)返回值的数值。这是因为Len函数返回的是字符串中字符的数目,而LenB函数返回的是字符串中字节的数目。一个Unicode串的字符长度仅仅是该串中实际字节数目的一半,这是因为每个Unicode字符2个字节。
  四、 字符串转换成VB字符串
  当我们在VB中调用Win32 API函数时,如果函数的返回值是一个字符串,那一般有如下三种情况:
  1. 函数预先要求你提供一个有固定空间的字符串,以供存储函数的返回值。
  2. 函数的返回是一个以Null结尾的C字符串,而不是正规的VB字符串。
  3. Win32 API函数有时候会返回另一种类型的字符串。这种类型的字符串在单个缓冲区内保存了多个字符串值,每个值之间用Null隔开,结尾的是两个Null,一个Null是最后一个字符串值的结尾符,另一个Null是整个字符串的结尾符。这其实就是我们通常在C中遇到的字符串数组。
  第一种情况很好办,只无原则预先定义好一个空间足够大的字符串,然后把API函数的返回值赋于这个字符串就可以了。例如,如果你已经知道函数返回值最多不会走过256个字符,可以这样编码如下:
Dim sAPIReturn as string
SAPIReturn=