vb6擷取字串長度

來源:互聯網
上載者:User

標籤:io   使用   ar   sp   問題   on   cti   工作   時間   

用過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時的長度,並且速度很快

vb6擷取字串長度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.