Asc/AscB/AscW 和 Chr/ChrB/ChrW 之間的資訊: 函式差異

文章翻譯 文章翻譯
文章編號: 145745 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

如年,基本的程式設計師已經使用 [Asc],然後 Chr 函數來存取和操作在 ASCII 字元集。主流作業系統和應用程式中的 Unicode 接受度問世,Asc] 和 [Chr 函數的改良版本的需求已發展出。為了滿足這個需求,Microsoft Visual Basic 4.0 版及更高的 Windows 包含 AscB/ChrB 和 AscW/ChrW 函式。

其他相關資訊

Unicode 是一種標準是設計用來取代 ANSI 標準的數字的表單中的字元的編碼方式。因為標準 ANSI 只使用單一位元組來代表每個字元,受限於最多 256 個不同的字元。雖然這是足夠的英文的說話觀眾需求,它落短時就會被視為全球軟體市場。Unicode] 標準每個字元由兩個位元組,以便設定整個 Unicode 字元包括 65,536 的可能位置。

Microsoft Windows NT、 Microsoft Windows 2000 和 Microsoft OLE 2.0 完全是 Unicode 基礎,Visual Basic 4.0 版及更高表示在內部以 Unicode 格式的所有字串。AscW] 和 [ChrW 函式允許存取完整範圍的 Unicode 字元。這些功能可在原始的 Asc 和 Chr 函數一樣,不同之處在於它們支援引數從 0 到 65,535 而非只是從 0 到 255 之間。許多 Visual Basic 物件 (例如偵錯視窗和 [標籤] 和 [文字] 方塊中) 傳回一個"?"當這些物件並不知道如何顯示 Unicode 字元。

因為所有字串現在以 Unicode 格式在內部都表示,並不像它用來是代表字串中的二進位資料簡單。 使用 Chr 函數將資料指定為字串不會導致相同行為與之前。例如:
   stringvar = Chr(65)
				

兩個位元組長字串,1 位元組的值為 65 和位元組 2 的位置會產生的值為 0 (這是字母"A"表示 Unicode 表示法)。 請務必記住 ANSI 的轉換為 Unicode 並不永遠卻只新增第二個位元組值為零,在這種情況下,不像。比方說大部分的 ANSI 字元代碼 130 159 範圍中有完全不同的 Unicode 值。請試著執行 'Debug.Print AscW(Chr(130))' 與您的 8218 值顯示。

目前,Microsoft Windows 需要一點 Endian 處理器,這表示多個位元組實體中第一個位元組是最小顯著性的和重要性增加連續 (以位元組為單位)。此單元解說 Unicode 字元"A"以下列的內部表示為何:
   -------------------
   |   65   |    0   |
   -------------------
     byte 0     byte 1
				

AscB] 和 [ChrB 函式來複寫什麼用以可藉由 Asc 和 Chr] 函式,因為這些函式允許操作的單一位元組數量。如果您想要四個位元組的字串連續具有 65]、 [66]、 [67,] 和 [68 的二進位值再使用 Chr 函數將無法正常運作。您反而必須使用 ChrB 函式。例如:
   stringvar = ChrB(65) & ChrB(66) & ChrB(67) & ChrB(68)
				

或者,您可以使用能力來建立新的位元組資料型別的陣列和操作二進位資料這種方法。

下面列出是函式,以進一步釐清這項資訊的一些簡單使用結果的說明。

--列印 Asc(Chr(255)) > 255"

沒有任何新這裡,不同之處在於 Chr 函數正在傳回 Unicode 字元所佔據兩個位元組,而不是一個位元組 ANSI 字元。

--列印 Asc(ChrB(255)) > 5-無效的程序呼叫。

這種用法傳回錯誤,因為 Asc 函式永遠預期至少要有兩個位元組參數和 ChrB 函式只會傳回單一位元組。

--列印 Asc(Chr(256)) > 5-無效的程序呼叫。

雖然 Chr 函數會傳回兩個位元組 Unicode 字元,它仍然只接受數字 0 到 255 之間的其引數 (請注意啟用 DBCS 系統上 Asc/Chr 處理兩個位元組 DBCS 字元與 Unicode 在轉換)。使用 ChrW 函式允許存取完整 65,536 的 Unicode 字元位置。

--列印 AscW(ChrW(256)) > 256"

這是新版本的這一節中第一個陳述式。ChrW 函式會取得介於 0 到 65,536,並傳回該字元 (在 32 位元系統)。AscW 函數會解譯為 Unicode 字元這個雙位元組字元,並傳回該字元正確的 Unicode 值。

--列印 Asc(ChrW(256)) > 65"
--列印 Asc(ChrW(5000)) > 63"

發生了什麼事這裡 [ChrW 函式會先被評估。 ChrW(256) 是"A"字元和函式因此可減少 Asc("A"),Unicode (和 ANSI) 數字,如 「 A 」 是 65。因為 Visual Basic 不知道如何顯示由 Chr(5000) 它只會顯示表示字元一個"?",和 Unicode 與 ANSI 如預期般,值為"? 」 是 63。

--列印 AscB(Chr(65)) > 65"
--列印 AscB(ChrW(256)) >"0"
--列印 AscB(ChrW(257)) >"1"
--列印 AscB(ChrW(555)) > 43 」
--列印 AscB(ChrW(65535)) > 255"

所有這些傳回值,請解釋了解如何每個字元在內部表示 (請參閱上述由小到大參考資料) 以及 AscB 函數只查看第一個位元組的字元會在收到這個事實。以視覺方式則看起來會像下列的圖表:
             -------------------
   Chr(65)   |   65   |    0   |
             -------------------
   Chr(256)  |    0   |    1   |
            -------------------
   Chr(257)  |    1   |    1   |
             -------------------
   Chr(555)  |   43   |    1   |
             -------------------
   Chr(65535)|   255  |  255   |
             -------------------
               byte 0    byte 1
				

AscB 函數只會傳回第一個位元組的字元是任何項目。

列印 ChrB(65)-->""

因為 ChrB 函式只會傳回一個位元組字串 Visual Basic 會列印這個 ChrB 函式呼叫的執行任何動作。因為它們並不構成有效的 Unicode 字元 (或一系列的字元),就像這樣的一個位元組字串就表示 Visual Basic 來執行任何動作。

列印 ChrB(65) ChrB(0)-->"A"(& I)

在這種情況下我們成單一的雙位元組字串串連兩個單位元組字串。因為結果的位元模式是相同的 Unicode"A"位元模式是 Visual Basic 會列印。

屬性

文章編號: 145745 - 上次校閱: 2003年5月7日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
關鍵字:?
kbmt kbinfo KB145745 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:145745
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com