首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

VB6 LenB 函數詳解:返回字節數,雙字節字符集下英文也佔 2 字節

     編輯:程式設計疑難解答

結論

LenB 返回字符串在內存中佔用的字節數。VB6 內部使用 雙字節 Unicode (UTF-16LE) 存儲字符串,因此:

  • LenB("hello") = 10 (5 字符 × 2 字節)
  • LenB("中文") = 4 (2 字符 × 2 字節)
  • Len("hello") = 5 (字符數)

原理

  • VB6 字符串變量類型為 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)

注意事項

  1. LenB 不等於文件存儲/網絡傳輸字節數,除非文件為 UTF-16 編碼。
  2. 調用 API (如 WriteFile) 時,需用 StrConv(s, vbFromUnicode) 獲取 ANSI 字節數組,再傳遞指針與 LenB(bytes)。
  3. VB.NET 中 LenB 行為不同,依賴 System.Text.Encoding。

總結

VB6 LenB 反映內存 UTF-16 字節長度,固定 2 字節/字符。涉及外部交互 (文件、API、網絡) 時,必須用 StrConv 轉換為目標編碼字節數組,再以該數組長度為準。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved