转自(http://www.cnblogs.com/IDqq/archive/2006/04/04/366459.html)
VB.NET里的Array类提供了很多对数组进行拷贝、裁剪等操作的方法。在VB6里如何在保证效率的前提下实现这些功能?本文给出一个用于裁剪数组的函数实现。
1 API声明
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
2 实现:
' 返回byt的从iStart开始,长度是iLen的一段副本 Private Function SubArray(byt() As Byte, ByVal iStart As Long, ByVal iLen As Long) As Byte() Dim buf() As Byte ReDim buf(iLen - 1) As Byte ' 这里byt(0)和byt(iStart)传进去的是地址 CopyMemory buf(0), byt(iStart), iLen SubArray = buf End Function
3 示例:
下面给出一个用上面的方法截取字符串的小例子,字符串里含有全角和半角字符(全角按2bytes算)
Dim byt() As Byte ' 使用当前系统ASNI代码页把Unicode字符串转成ASNI码的多字节数组 byt = StrConv("一二三ABC", vbFromUnicode) ' 截取前两byte,再转回Unicode码。对话框显示"一"。 MsgBox StrConv(SubArray(byt, 0, 2), vbUnicode)