- 5
- 0
- 约5.13千字
- 约 6页
- 2018-04-01 发布于北京
- 举报
浅议VB6字节数组和字符串的相互转换.doc浅议VB6字节数组和字符串的相互转换.doc浅议VB6字节数组和字符串的相互转换.doc
浅议VB6字节数组和字符串的相互转换 一、 前言 数据类型转换在编程中经常用到,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 LongPrivate Sub Form_Click() Dim n As Integer Dim str As String str = Space$(256) n = GetSystemDirectory(str, 256) str = Left$(str, n) Print strEnd 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 LongPrivate 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 strAEnd Sub 不知道读者注意到没有,第二段代码中的GetSystemDirectory API函数的声明已经改变了。第一个参数的声明由一个ByVal字符串变成了一个ByRef的Byte数组,即由声明:
ByVal lpBuffer As String 变成了:
ByRef lpBuffer As Byte 传递字符串时,需要一个ByVal修饰符来把字符串缓冲区传递到API函数中,因为字符串变量实际上指示了字符串内容所在的内存地址。在C语言术语中,这代表了一个指向指针的指针。ByVal意味着被传递的是一个指向实际字符串内容的内存地址。而在传递Byte数组Buffer(0)时,使用ByRef修饰符来传递
您可能关注的文档
最近下载
- 国企面试问题及答案-国企面试题目和解答-国企单位面试的题目.docx VIP
- 沈阳工业大学《数据库原理》2025 学年第二学期期末试卷.pdf VIP
- 储能变流器简介及英飞凌IGBT解决方案-TTA2019.pdf VIP
- 房产过户合同8篇.docx VIP
- 大学生心理健康教育 课件全套 总共13章 大学生心理健康与心理咨询 ,心理危机与生命教育等课件.pptx VIP
- 茅台国企面试题目及答案.doc VIP
- X-MINI 杂物梯主板说明书.pdf VIP
- 市政协副主席2025年度民主生活会对照检查材料(五个带头).docx VIP
- 2023年沈阳工业大学计算机科学与技术专业《计算机网络》科目期末试卷B(有答案).docx VIP
- 花式年糕加工机设计【开题报告+文献综述+毕业设计】.Doc VIP
原创力文档

文档评论(0)