vb6中不论是中文字符还是英文字母、数字都用双字节表示,对吧?
错!英文用的是单字节,用LenB()可以得到实际长度
超过0xff的就不是ascii码附:说明这个问题的例子:
根本不可能执行,vb里没有指针的,数组怎么=字符?

解决方案 »

  1.   

    对。
    即使在运行的时候也只会出现“不能给数组赋值”的错误。
    但是至于长度好象不是那么简单:用lenB()似乎是每个字符为两个字节的长度,而len()则为一个。
      

  2.   

    lenb()得到的结果是错误的!正确的方法是lenb(strconv(yourstring,vbfromunicode))得到的是每个英文字母一个字节+每个中文两个字节的长度。想应的api是lstrlen。
      

  3.   

    如果用lenb,而且是vb的原来的默认字符集(非unicode),e文就是一个字符,中文是两个。也不知道的sp?的vb默认字符变unicode了……
      

  4.   

        仁者见仁,智者见智!各位老大,果然厉害!不过我觉得问题倒是越辩越明了!
       哦!不好意思,我又看了一下我举的例子,中间有个大错误,正确的应是(byt数组不是string型,而是byte型):    sub form_load()
        dim str as string
        dim byt() as byte
        
        str="是个问题abcde"
        byt=str 
      end sub
    在end sub处设置断点,运行到此处时添加watch:byt,看看byt里存了什么大家就明白了!    这个问题还跟vb的sp有关系?我不知道。我只知道上面的例子在vb6和在vb3上运行,结果不同。
        在vb3上是中文两个字节,E文一个字节!
        在vb6上是什么样子,各位老大可以看一看!
        真不好意思,向各位老大致谦!(cloudred痛哭流涕的请求各位老大的原谅......)
        
      

  5.   

        在VB中一个字符到底占一个还是两个字节可自己计算lenB()和len()的结果都是不对的这是我写的一个函数可计算任意字符串的长度
    Private Function LenString(aString As String) As Long
        Dim aStr As String
        Dim bStr As String
        Dim i As Integer
        Dim j As Integer
        aStr = aString
                    
        For i = 0 To Len(aStr) - 1
            bStr = Mid(aStr, i + 1, 1)
            If (Asc(bStr) < 0) Then
                j = j + 2
            Else
                j = j + 1
            End If
        Next i
        LenString = j
    End Function