設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 2340|回復(fù): 2
打印 上一主題 下一主題

[模塊/函數(shù)] 有意思的雙字節(jié)測試!考考你的基礎(chǔ)知識(shí)!知道的人不多

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2014-4-26 14:33:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
問題,希臘字符,應(yīng)該是雙字節(jié),還是單字節(jié)呢,為什么?

不懂看下面測試
Sub TestLenDB()
    Str = "ΑΒΓαβγ" '希臘字符,應(yīng)該是雙字節(jié),還是單字節(jié)呢
    Debug.Print LenDB(Str), LenEx(Str), LenEx1(Str)
End Sub


返回單雙字節(jié)的三個(gè)算法
Public Function LenEx(VarString As Variant) As Variant
'算法一
    LenEx = LenB(StrConv(VarString, vbFromUnicode))    '將Unicode轉(zhuǎn)換為ANSI,然后再計(jì)算字節(jié)長度
End Function
'算法二
Public Function LenEx1(VarString As Variant) As Variant
    Dim lLen As Integer, i As Integer
    LenEx1 = 0
    lLen = Len(VarString)
    If lLen Then                              '如長度不為零
        For i = 1 To lLen
            If Asc(Mid(VarString, i, 1)) < 0 Then
                LenEx1 = LenEx1 + 2
            Else
                LenEx1 = LenEx1 + 1
            End If
        Next
    End If
End Function


'算法三     直接操作對(duì)比Unicode碼
Function LenDB(Str As String) As Long
    Dim i As Long, lngLenB As Long
    Dim abytStr() As Byte
    Const DoubleByte As Byte = &H30
    abytStr = Str
    lngLenB = LenB(Str)
    For i = 1& To lngLenB Step 2&
        If abytStr(i) < DoubleByte Then
            lngLenB = lngLenB - 1&
        End If
    Next
    LenDB = lngLenB
End Function




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2014-4-26 17:55:02 | 只看該作者
不錯(cuò),學(xué)習(xí)了。

點(diǎn)擊這里給我發(fā)消息

3#
發(fā)表于 2014-6-24 05:48:38 來自手機(jī) | 只看該作者
不錯(cuò),。。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 08:32 , Processed in 0.113472 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表