LenB 返回字符串在內存中佔用的字節數。VB6 內部使用 雙字節 Unicode (UTF-16LE) 存儲字符串,因此:
LenB("hello") = 10 (5 字符 × 2 字節)LenB("中文") = 4 (2 字符 × 2 字節)Len("hello") = 5 (字符數)BSTR (COM 標準),內存佈局:[長度前綴][UTF-16 字符數據][雙空終止符]。LenB 直接讀取長度前綴 (字節數),不關心編碼語義。StrConv(str, vbFromUnicode) 可將內存 Unicode 轉為當前代碼頁 (如 GB2312) 字節數組,此時 LenB(StrConv(...)) 反映實際編碼字節數 (英文 1 字節,中文 2 字節)。
Dim s As String
s = "AB中"
Debug.Print Len(s) ' 3 (字符數)
Debug.Print LenB(s) ' 6 (內存 UTF-16 字節數)
Dim bytes() As Byte
bytes = StrConv(s, vbFromUnicode) ' 轉為當前系統代碼頁 (如 CP936)
Debug.Print UBound(bytes) + 1 ' 4 (GB2312 下: A=1, B=1, 中=2, 文=2)
LenB 不等於文件存儲/網絡傳輸字節數,除非文件為 UTF-16 編碼。WriteFile) 時,需用 StrConv(s, vbFromUnicode) 獲取 ANSI 字節數組,再傳遞指針與 LenB(bytes)。LenB 行為不同,依賴 System.Text.Encoding。VB6 LenB 反映內存 UTF-16 字節長度,固定 2 字節/字符。涉及外部交互 (文件、API、網絡) 時,必須用 StrConv 轉換為目標編碼字節數組,再以該數組長度為準。