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))。
这里用到了一个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时的长度,并且速度很快

时间: 2024-07-31 07:12:25

vb6获取字符串长度的相关文章

oracle获取字符串长度函数length()和hengthb()

原文:oracle获取字符串长度函数length()和hengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符 对于单字节字符,LENGTHB和LENGTH是一样的. 如可以用length(‘string’)=lengthb(‘string’)判断字符串是否含有中文. 注: 一个汉字在Oracle数据库里占多少字节跟数据库的字符集有关,UTF8时,长度为

对几种获取字符串长度的方法进行性能比较

测试环境: 操作系统:CentOS release 6.8 (Final) 操作环境:vi编辑器 任务:对获取字符串长度的几种统计方法的性能比较. 测试数据如下: 1.变量自带的获取长度的方法 [[email protected] scripts]# time for n in {1..10000};do char=`seq -s "skyboy" 100`;echo ${#char} &>/dev/null;done real    0m19.712s user    

DOS命令(cmd)批处理:替换字符串、截取字符串、扩充字符串、获取字符串长度

1.替换字符串,即将某一字符串中的特定字符或字符串替换为给定的字符串.举例说明其功能:========================================= @echo off set aa=伟大的中国!我为你自豪! echo 替换前:%aa% echo 替换后:%aa:中国=中华人民共和国% echo aa = %aa% set "aa=%aa:中国=中华人民共和国%" echo aa = %aa% pause ==============================

获取字符串长度【把双字节的替换成两个单字节的然后再获得长度

/** * 获取字符串长度[把双字节的替换成两个单字节的然后再获得长度] * @param str * @returns */ function getBlen(str) { if (str == null) return 0; if (typeof str != "string"){ str += ""; } return str.replace(/[^\x00-\xff]/g,"01").length; }

linux shell脚本编程笔记(四): 获取字符串长度的七种方法

获取字符串长度的七种方法 1. \${#str} 2.awk的length 备注:1) 最好用{}来放置变量2) 也可以用length($0)来统计文件中每行的长度 3.awk的NF 备注: -F为分隔符,NF为域的个数,即单行字符串的长度 4.wc的-L 备注: -L参数1) 对多行文件来说,表示打印最长行的长度! 82,表示/etc/passwd文件最长行的长度为822) 对单行字符串而言,表示当前行字符串的长度! 5.wc -c 备注: 1) -c参数: 统计字符的个数2) -n参数: 去

shell获取字符串长度

方法1: 使用wc -L命令 wc -L可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数. 代码如下: echo "abc" |wc -L 方法2: expr length string 使用expr length可以获取string的长度 方法3: awk获取域的个数,但是如果大于10个字符的长度时是否存在问题需要后面确认 代码如下: echo "abc" |awk -F ""

获取字符串长度、字符长度、字节长度

度量快速开发平台中基础函数中有一个  len  的获取字符长度函数.具体用法是:len ("123Abc字符串") 这个方法得到的结果是:9 即一共有多少个字符,没有区分单字节与双字节的情况. 如果某一个字段设置的长度为9,那刚才这个字符串保存到数据库的时候,会提示字符串过长,因为数据库中一般是按照字节长度来判断的. 度量快速开发平台中,是没有直接提供这个获取字符串字节长度得函数.用户想知道这个字符串占用了多少字节,在平台中如何来得到呢? 我们知道,度量快速开发平台是与c#完美结合使用

20170225 ABAP获取字符串长度/字节长度

函数YGET_CHAR_LONG: FUNCTION YGET_CHAR_LONG. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(STRING) TYPE STRING OPTIONAL *" EXPORTING *" VALUE(STR) TYPE STRING *&qu

C++获取字符串长度的几个函数

C/C++ strlen(str).str.length().str.size().sizeof(str)都可以求字符串长度. 其中str.length().str.size().sizeof(str)是用于求string类对象的成员函数 strlen(str)是用于求字符数组的长度,其参数是char*. #include<iostream> using namespace std; int main() { char* ptr="12345678"; cout<&l