上面思路是正確的, 用ascw 函數也可以
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:空間域名、網站空間、營銷軟件、網站建設、鄯善網站維護、網站推廣。
private function LenC( ps as string ) as Integer
Dim n As Integer
Dim StrLen As Integer
For n = 1 To Len(Text1.Text)
If Ascw(Mid(Text1.Text, n, 1)) 256 Then
StrLen = StrLen + 2
Else
StrLen = StrLen + 1
Next n
return strLen
end function
確定包含全角和半角字符的字符串長度(VB)
各個版本的VB對漢字字符的長度定義并不相同。在Windows 3.x中,VB3中認為每個漢字的長度為2字節(jié)。VB自從32位版本以后,不管中英文字,均以2 bytes來儲存,這與中文Win95的漢字內核有關。但是VB4以后,VB認為每個漢字的長度為1。這在處理包含漢字的字符串時帶來很多的不便。
由于Len、Left、Mid等字符串函數認為一個漢字和一個西文字符的長度都為1,因此處理漢字字符串時有一定的難度。實現上必須要能把漢字按照兩個字符(字節(jié))的形式讀出。因此在截取漢字字符串的子串時需特別注意。
由于漢字處理和漢字字模存儲的特殊性,在許多情況下我們希望漢字字符的長度為2,英文字符為1。由于VB5和VB6把一個漢字作為一個字符。因此處理漢字時首先必須能正確判斷漢字字符串的長度。
在VB3或C++里,漢字的 ASCII碼均大于零,而VB5和VB6中漢字的ASCII碼小于0。因此通過判斷一個未知字符的ASCII碼就可以判斷該字符是否漢字。
這里我們提供了3種方法來判斷漢字字符串的長度。
1、方法1
VB6中提供了LenB函數用于字符串中的字節(jié)數據。如同在雙字節(jié)字符集(DBCS)語言中一樣,LenB返回的是用于代表字符串的字節(jié)數,而不是返回字符串中字符的數量。如為用戶自定義類型,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 程序判斷中英文字然后計算長度來的快。
Date 變量存儲為 IEEE 64 位(8 個字節(jié))
Boolean 變量存儲為 16 位(2 個字節(jié))
Byte 變量存儲為單精度型、無符號整型、8 位(1個字節(jié))
Currency 變量存儲為 64 位(8 個字節(jié))
Double(雙精度浮點型)變量存儲為 IEEE 64 位(8 個字節(jié))
Integer 變量存儲為 16位(2 個字節(jié))
Long(長整型)變量存儲為 32 位(4 個字節(jié))
Variant 是一種特殊的數據類型,除了定長 String 數據及用戶定義類型外,可以包含任何種類的數據。Variant 也可以包含 Empty、Error、Nothing 及 Null等特殊值??梢杂?VarType 函數或 TypeName 函數來決定如何處理 Variant 中的數據。
摘自幫助文檔,我也不是很理解
估計只有在Visual Basic 文件輸入和輸出才有用
示例
Visual Basic 復制代碼
Structure Person
Public ID As Integer
Public MonthlySalary As Decimal
Public LastReviewDate As Long
VBFixedString(15) Public FirstName As String
VBFixedString(15) Public LastName As String
VBFixedString(15) Public Title As String
VBFixedString(150) Public ReviewComments As String
End Structure
注意
VBFixedStringAttribute 是信息性的屬性,不能用于將可變長度字符串轉換為固定長度字符串。此屬性的作用是修改那些識別 VBFixedStringAttribute 的方法或 API 調用(如 Len 和 FilePut 函數)使用結構中的字符串以及非局部變量的方式。請記住,此屬性不會更改字符串本身的實際長度。
備注
默認情況下,Visual Basic 字符串為可變長度的字符串。在使用 Visual Basic 文件輸入和輸出函數(如需要固定長度字符串的 FileGet 和 FilePut)時,該屬性非常有用。
注意
VBFixedStringAttribute 屬性以字節(jié)而不是字符為單位指定字符串長度。
Private?Sub?Command1_Click()
Dim?s?As?String
s?=?InputBox("請輸入字符串")
MsgBox?("輸入的字符串長度是"??Len(s))
End?Sub
遍歷每一個字符,看是全角還是半角的。半角的字符總數 +1,全角的字符總數 +2。
參考:
Public?Function?GetByteLength(ByVal?value?As?String)?As?Long
Dim?i?As?Long?=?0
For?Each?c?As?Char?In?value
If?(c.ToString().Length?=?System.Text.Encoding.Default.GetByteCount(value.ToString()))?Then
i?=?i?+?1
End?If
i?=?i?+?1
Next
Return?i
End?Function
分享文章:vb.net計算字串長度,vbnet string最大長度
當前網址:http://jinyejixie.com/article0/hojpio.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供手機網站建設、做網站、App開發(fā)、營銷型網站建設、商城網站、小程序開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)