Len("1234") = 4     ----------->打印时占4
len("中国人民") = 4  ----------->打印时占8
Len("中国12") = 4      ----------->打印时占6lenB("1234") = 8    ----------->打印时占4
lenB("中国人民") = 8  ----------->打印时占8
lenb("中国12") = 8    ----------->打印时占6对于一个字符串我如何知道打印的时候/或显示的时候到底占多少位???

解决方案 »

  1.   

    VB 中字串是 UniCode 格式,我们就知道 Len("ABC测试") 等于 5 , LenB("ABC测试") 等于10,当然,因为 Win9x 系统内部并不使用 UniCode ,所以在和 API 接口时就会出现问题了。我们经常可以见到 API 的声明函数最后由一个“A”,比如“SetWindowTextA”“GetPrivateProfileStringA”等等,这是表明此函数使用 ANSI 字符串格式;相对的,也有使用 UniCode格式字串的相同功能的函数,后缀为“U”,比如“SetWindowTextU”“GetPrivateProfileStringU”等等,不过这些 UniCode 格式的函数一般仅用于 Windows NT ,Windows 9x 上很少有,另外,因为 Windows NT 也支持 ANSI 格式的函数,所以平时我们调用的仍然是 ANSI格式的函数,也所以 VB 在调用 API 时,都会把字串转换成字符串,以便和 ANSI 函数相兼容。
    Len和LenB函数 
        Visual Basic有两个返回字符串长度的函数:Len和LenB。它们都可以接收一个BSTR或是一个ANSI BSTR,并且返回一个长整型数值。以下的代码说明了一切: 
        s = "help" 
        Debug.Print Len(s), LenB(s) 
        Debug.Print Len(StrConv(s, vbFromUnicode)), LenB(StrConv(s, vbFromUnicode)) 
        输出结果是: 
        4         8 
        2         4 
        这表明,Len返回的是字符数,而LenB返回的是在BSTR中的字节数。
      

  2.   

    我明白 len lenb我如何知道,一个字符串打印的时候占几位,我不关心 怎么存储,只关心用眼睛看见的位数s = "中国12" 
    Debug.Print LenB(StrConv(s, vbFromUnicode)) 
    输出结果是: 4? 6? 8?
      

  3.   

    你说的“位数”是什么?字节数??lenb(strconv("测试test",&H80))
     8
      

  4.   

    len返回的字符数,不管中西文,一个算一个
    ?len("啊a")
     2 lenb返回字节数,但由于VB采用UniCode编码,不管中西文,都占2字节
    ?lenb("啊a")
     4 想把中文字符当成2字节,西文字符1字节,得先用StrConv转换
    ?lenb(strconv("啊a",&H80))
     3
      

  5.   

    cso(sjxsoft-天水是我家)说的很清楚了,另外一种方法是调用api函数lstrlen:Option ExplicitPrivate Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long'请注意调用 lstrlen 时必须加上 Chr(0), 因为此一函数是根据 Chr(0) 来判断字串的结束。
    '调用 lstrlen 除了程序比较简短之外, 速度也比我们写 VB 程序判断中英文字然后计算长度来的快。
    Private Sub Command1_Click()
        Dim s As String
        Dim i As Long
        s = "1234"
        i = lstrlen(s + Chr(0)) 'i返回4
        MsgBox CStr(i)
        s = "中国人民"
        i = lstrlen(s + Chr(0)) 'i返回8
        MsgBox CStr(i)
        s = "中国12"
        i = lstrlen(s + Chr(0)) 'i返回6
        MsgBox CStr(i)
    End Sub