看流星社区

 找回密码
 注册账号
查看: 2419|回复: 1

[VB] vb中字符的长度

[复制链接]

该用户从未签到

发表于 2014-7-8 09:12:04 | 显示全部楼层 |阅读模式
因为vb中数字、字母跟汉字都算一个字,占2个字节,打印出来长度却只有汉字的一半,可不可以判断,在text中输入一串字符,如果是字母、数字和标点,只占用半个字?(text限33字,我用if Len(Text1.Text)>33 Then msgBox"超出"),如果输入有数字或者字母的话,我想输入更长一些,比如30个汉字+6个数字

该用户从未签到

发表于 2014-7-8 09:12:18 | 显示全部楼层
确定包含全角和半角字符的字符串长度(VB)

         各个版本的VB对汉字字符的长度定义并不相同。在Windows 3.x中,VB3中认为每个汉字的长度为2字节。VB自从32位版本以后,不管中英文字,均以2 bytes来储存,这与中文Win95的汉字内核有关。但是VB4以后,VB认为每个汉字的长度为1。这在处理包含汉字的字符串时带来很多的不便。

  由于Len、Left、Mid等字符串函数认为一个汉字和一个西文字符的长度都为1,因此处理汉字字符串时有一定的难度。实现上必须要能把汉字按照两个字符(字节)的形式读出。因此在截取汉字字符串的子串时需特别注意。

  由于汉字处理和汉字字模存储的特殊性,在许多情况下我们希望汉字字符的长度为2,英文字符为1。由于VB5和VB6把一个汉字作为一个字符。因此处理汉字时首先必须能正确判断汉字字符串的长度。

  在VB3或C++里,汉字的 ASCII码均大于零,而VB5和VB6中汉字的ASCII码小于0。因此通过判断一个未知字符的ASCII码就可以判断该字符是否汉字。

  这里我们提供了3种方法来判断汉字字符串的长度。

  1、方法1

  VB6中提供了LenB函数用于字符串中的字节数据。如同在双字节字符集(DBCS)语言中一样,LenB返回的是用于代表字符串的字节数,而不是返回字符串中字符的数量。如为用户自定义类型,LenB返回在内存中的大小。
  LenB(StrConv(Str1,vbFormUnicode))
  对要处理的字符串Str1,必须先使用StrConv函数把ANSI格式的Byte数组转换为字符串,否则直接使用LenB函数得到的结果比实际结果大。

  2、方法2
  这里自定义了一个子函数CLen来计算汉字字符串的实际长度。同时还能判断字符串中汉字的实际个数。
  Function CharacterLen(s_str As String) As Integer

            Dim i_num As Integer
            Dim i_index As Integer
            Dim i_len As Integer
   
            i_len = Len(s_str)

            For i_index = 1 To i_len
   
                If Asc(Mid(s_str, i_index, 1)) < 0 Then
                    i_num = i_num + 1
                End If
            Next
            CharacterLen = i_len + i_num
    End Function

方法3
可以使用   Windows   API   的   lstrlen   函数,   假设假计算   S   的长度,   则   API   声明式如下:   
  Private   Declare   Function   lstrlen   Lib   "kernel32"   Alias   "lstrlenA"   (ByVal   lpString   As   String)   As   Long   
  而调用的叙述则是:   
  n   =   lstrlen("中英Mixed"   +   Chr(0))   
  Print   n   '   n   将等于   9   
  请注意调用   lstrlen   时必须加上   Chr(0),   因为此一函数是根据   Chr(0)   来判断字串的结束。   
  调用   lstrlen   除了程序比较简短之外,   速度也比我们写   VB   程序判断中英文字然后计算长度来的快。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-20 11:52

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表