vb6获取字符串长度
⽤过VB5.0或者更早版本的读者应该知道VB有⼀个测试字符串长度的函数: Len。但当你升级到VB6时,会发现这⾥的Len并没有以前那么好⽤了——它变成了测试字符个数⽽不是字符串长度。就是说,当你⽤以前版本的VB执⾏Len("字符abc")时,返回值是7,因为中⽂字符每个有2个字节,所以总共有7个字节;⽽在VB6中执⾏,返回值是5。
VB6不再有⼀个直接计算出字符串总字节数的函数了,因为VB6内部已经把字符串转换成了Unicode——⼀种⽐ANSI更新的字符编码⽅式。
Unicode把每⼀个字,⽆论是中⽂还是其他⽂字都当成两个字节,如果是英⽂,则这两个字节中第⼆个字节保留着不使⽤,如果是双字节字符(如中⽂,双字节⽇⽂以及韩⽂),⽽由这两个字节的组合表⽰⼀个字符。所以Len可以⽅便地知道⼀共有多少个双字节字符,多少个单字节字符,也就出现了上⾯所说的情况。
不过既然VB内部把ANSI字符转换成Unicode,那么它⼀定有对应⽅法转换回来。所以这⾥提供⼀个⽐较⽅便的⽅法来得到总字节
数: LenB(StrConv("字符abc", vbFromUnicode))。
unicode所有字符这⾥⽤到了⼀个LenB() 函数,你可以⾃⼰试试它,⽐如 LenB("字符")、LenB("abc")、LenB("字符abc"),会发现返回值分别是4、6和10。 为什么是4、6和10呢?
我说过VB内部把ANSI字符转换为Unicode,每个Unicode字符⽤2个字节来表⽰,所以,LenB() 的作⽤是返回字符串的实际字节数。但是,这个实际字节数已经不是我所输⼊的字符串的,⽽是被VB转换过的(我们⽆法让VB函数在转换之前先算好长度),所以我们需要先把字符串转换回来,使⽤的是 StrConv() 函数。
对于这个函数我不想太过详细解释它(⼀般应⽤中⽐较少⽤),你可以参考MSDN,我只提⼀提它的第⼆个参数:vbFromUnicode。
StrConv()函数的第⼆个函数指定转换的类型,vbFromUnicode 指定把字符串从Unicode转换回来,如果是vbUnicode,则把字符串转换为Unicode。注意,虽然你的程序中写的是ANSI的字符⽽不是Unicode字符,但当这个函数执⾏时,它得到的却是已经被转换成为Unicode 的字符串了。
现在问题可以算解决了,但我们还需要另⼀个解决⽅法,因为这种⽅法太费时。想想看,每⼀次算长度都要进⾏ Unicode->ANSI 的转换,这将会花费太多时间。对少量字符还可以,对长字符串,时间就变得更长了。
所以我们再讲⼀个API:lstrlen。
Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
以上是lstrlen的声明。lstrlen的作⽤只有⼀个:
得到以chr(0)为结尾的字符串的字节数。所以执⾏ lstrlen("字符abc"+chr(0)) 将返回7。我们不需要知道它内部是如何⼯作的,但它总是返回该字符串是ANSI时的长度,并且速度很快
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论