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

VB6.0 ChrB/AscB 轉換陷阱與 Unicode 編碼解析

     編輯:程式設計疑難解答

問題現象

使用 ChrB 生成的字節數組,嘗試用 AscB 反解時提示「無效的過程調用參數」。代碼涉及 y(j)=Chr(a)&Chr(b)&Chr(c)&Chr(d) 構造特殊符號,再用 MidB、AscB 處理。

根因分析

  • VB6 內部使用 Unicode (UTF-16) 存儲字符串,每字符 2 字節。
  • ChrB 接受 0-255 返回單字節字符串(實為強制截斷高位字節的 Variant)。
  • AscB 僅接受單字節字符串,若傳入普通 Unicode 字符串(即使長度為 1)會報錯。
  • MidB 從字節角度截取,但返回的仍是 Variant,若未正確聲明為 Byte 數組,AscB 仍會失敗。

正確處理姿勢

  1. 使用 Byte 數組 而非字符串操作二進制數據:Dim arr() As Byte。
  2. 需字符串與字節互轉時,使用 StrConv(str, vbFromUnicode) (Unicode→系統默認 ANSI 字節) 和 StrConv(bytes, vbUnicode) (字節→Unicode)。
  3. 直接調用 Windows API WideCharToMultiByte/MultiByteToWideChar 指定代碼頁(如 65001 UTF-8)最可靠。

代碼修正示例

' 正確:構造字節數組
Dim bytes(3) As Byte
bytes(0) = a: bytes(1) = b: bytes(2) = c: bytes(3) = d

' 如需轉為字符串顯示(按系統 ANSI 頁)
Dim str As String
str = StrConv(bytes, vbUnicode) ' 字節數組 → Unicode 字符串

' 反向:字符串 → 字節數組
Dim bytes2() As Byte
bytes2 = StrConv(str, vbFromUnicode)

拋棄 ChrB/AscB/MidB 混用字符串的舊習慣,擁抱 Byte 數組 + StrConv/API 的現代寫法。

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