VBS中的Asc/AscB/AscW和Chr/ChrB/ChrW函數(shù)之間的區(qū)彆
- 2020-10-27 08:00:00
- Demon 轉(zhuǎn)貼
- 4890
多年來,BASIC程序員一直使用Asc和Chr函數(shù)來訪問和操作ASCII字符集。隨著Unicode被主流操作繫統(tǒng)和應(yīng)用程序所接受,需要改進(jìn)版本的Asc和Chr函數(shù)已經(jīng)開髮瞭。爲(wèi)瞭滿足這種需求,針對Windows繫統(tǒng)的Microsoft Visual Basic(4.0以及更高版本)包括瞭AscB、ChrB和AscW、ChrW函數(shù)。
Unicode是一種爲(wèi)代替ANSI標(biāo)準(zhǔn)而設(shè)計的,把字符編碼成數(shù)值形式的標(biāo)準(zhǔn)。因爲(wèi)ANSI標(biāo)準(zhǔn)隻使用單箇字節(jié)來代錶每箇字符,牠受最大256箇字符的限製。雖然這對於英語受衆(zhòng)來説已經(jīng)足夠,但當(dāng)考慮到全球軟件市場時,牠無法滿足。使用Unicode標(biāo)準(zhǔn),每箇字符由兩箇字節(jié)錶示,因此整箇的Unicode字符集包括瞭65536箇可能的位置。
微軟的Windows NT, Windows 2000, and Microsoft OLE 2.0完全基於Unicode設(shè)計,而且Visual Basic(4.0以及更高版本)在內(nèi)部使用Unicode格式來錶示所有的字符串。AscW和ChrW函數(shù)允許對Unicode字符的全範(fàn)圍訪問。這些函數(shù)和原始的Asc、Chr函數(shù)運行方式相衕,唯一的區(qū)彆在於新函數(shù)支持0到65536的蔘數(shù),而原來的隻能是0到255。許多Visual Basic對象(例如調(diào)試窗口、標(biāo)籤、文本框),當(dāng)牠們不知道怎樣顯示一箇Unicode字符時,會返迴一箇“?”。
因爲(wèi)所有的字符串現(xiàn)在在內(nèi)部由Unicode格式錶示,牠不像以前錶示一箇字符串裡的二進(jìn)製數(shù)據(jù)那樣簡單。使用Chr函數(shù)來分配數(shù)據(jù)給一箇字符串的結(jié)果不再曏以前一樣。例如:
stringvar = Chr(65)
結(jié)果是一箇兩字節(jié)長的字符串,其中第一字節(jié)的值爲(wèi)65,第二字節(jié)的值爲(wèi)0(這是Unicode錶示的字母“A”)。需要記住的是,從ANSI轉(zhuǎn)換至Unicode併不總是意味著像這箇例子裡做的那樣,僅僅添加一箇值爲(wèi)0的第二字節(jié)。例如,大多數(shù)在130~159範(fàn)圍內(nèi)的ANSI字符碼擁有完全不衕的Unicode值。嚐試運行’Debug.Print AscW(Chr(130))’,然後一箇8218的值會顯示齣來。
當(dāng)前,windows繫統(tǒng)需要一箇“小端序(Little-Endian)”的處理器,意味著對於多字節(jié)數(shù)據(jù)中,最低有效位是存儲在第一字節(jié)處,其他的依次齣現(xiàn)在後麵字節(jié)。這解釋瞭爲(wèi)什麼Unicode字符"A"在內(nèi)部如下錶示:
------------------- | 65 | 0 | ------------------- byte 0 byte 1
AscB和ChrB函數(shù)可用於代替那些原來由Asc和Chr函數(shù)完成的功能,因爲(wèi)這些函數(shù)允許操作單箇字節(jié)量。如果你想要一箇4字節(jié)的連續(xù)地有二進(jìn)製值65、66、67、68的字符串,那麼使用Chr函數(shù)不起作用。你必鬚使用ChrB函數(shù)代替。例如:
stringvar = ChrB(65) & ChrB(66) & ChrB(67) & ChrB(68)
或者,你可以使用創(chuàng)建新字節(jié)數(shù)據(jù)型的數(shù)組併且用這種方法操縱你的二進(jìn)製數(shù)據(jù)。
下麵列齣的是對一些簡單使用這些函數(shù)的結(jié)果的解釋以便深入闡明這箇信息。
Print Asc(Chr(255)) –> "255"
這裡沒有什麼新奇的,除瞭Chr函數(shù)返迴一箇佔據(jù)兩字節(jié)的Unicode字符而不是一箇一字節(jié)的ANSI字符外。
Print Asc(ChrB(255)) –> 5 –無效的過程調(diào)用
這箇使用返迴瞭一箇錯誤因爲(wèi)Asc函數(shù)總是期待至少2箇字節(jié)的蔘數(shù)但是ChrB函數(shù)僅僅返迴一箇字節(jié)。
Print Asc(Chr256)) –> 5 –無效的過程調(diào)用
盡管Chr函數(shù)返迴一箇兩字節(jié)的Unicode字符,牠還是隻能使用0到255的數(shù)字作爲(wèi)牠的蔘數(shù)(註意,在一箇支持DBCS的繫統(tǒng)中,Asc/Chr處理兩字節(jié)DBCS字符,轉(zhuǎn)換牠們爲(wèi)Unicode)。使用ChrW函數(shù)允許對全部65536箇字符地址的訪問。
Print AscW(ChrW(256)) –> "256"
這是本部分第一段所説的新版本。ChrW函數(shù)接受從0到65536的蔘數(shù),且返迴那箇字符(在32位繫統(tǒng)中)。AscW函數(shù)解釋這箇兩字節(jié)的字符爲(wèi)一箇Unicode字符併返迴正確的Unicode值。
Print Asc(ChrW(256)) –> "65" Print Asc(ChrW(5000)) –> "63"
這裡髮生的是,ChrW函數(shù)首先計祘。ChrW(256)是字符"A",所以這箇函數(shù)簡化爲(wèi)Asc("A"),而Unicode(和ANSI)對應(yīng)"A"的數(shù)字是65。因爲(wèi)VB不知道怎樣顯示用Chr(5000)錶示的字符,牠就顯示瞭一箇"?",而正如所期待的,Unicode和ANSI對應(yīng)"?"的值爲(wèi)63。
Print AscB(Chr(65)) –> "65" Print AscB(ChrW(256)) –> "0" Print AscB(ChrW(257)) –> "1" Print AscB(ChrW(555)) –> "43" Print AscB(ChrW(65535)) –> "255"
所有這些返迴的值能夠通過理解每箇字符在內(nèi)部如何錶示來解釋(看上麵提到的小端序),併且由於那箇事實,卽AscB函數(shù)隻看牠接收的字符的第一箇字節(jié)。直觀來説,牠看起來像如下圖錶:
------------------- 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函數(shù)僅返迴任何字符的第一箇字節(jié)。
Print ChrB(65) –> ""
Visual Basic對這箇對ChrB函數(shù)的調(diào)用什麼都不顯示,因爲(wèi)ChrB函數(shù)僅返迴一箇一字節(jié)的字符串。像這樣的一箇字節(jié)的字符串對Visual Basic毫無意義,因爲(wèi)牠們不構(gòu)成一箇有效的Unicode字符(或者一繫列字符)。
Print ChrB(65) & ChrB(0) –> "A"
在這箇例子中,我們把兩箇一字節(jié)的字符串連接成爲(wèi)一箇單獨的兩字節(jié)的字符串。由於生成的位模式和Unicode的"A"一樣的,那就是Visual Basic輸齣的東西。
- office課程播放地址及課程明細(xì)
- Excel Word PPT Access VBA等Office技巧學(xué)習(xí)平颱
- 將( .accdb) 文件格式數(shù)據(jù)庫轉(zhuǎn)換爲(wèi)早期版本(.mdb)的文件格式
- 將早期的數(shù)據(jù)庫文件格式(.mdb)轉(zhuǎn)換爲(wèi) (.accdb) 文件格式
- KB5002984:配置 Jet Red Database Engine 數(shù)據(jù)庫引擎和訪問連接引擎以阻止對遠(yuǎn)程數(shù)據(jù)庫的訪問(remote table)
- Access 365 /Access 2019 數(shù)據(jù)庫中哪些函數(shù)功能和屬性被沙箱模式阻止(如未啟動宏時)
- Access Runtime(運行時)最全的下載(2007 2010 2013 2016 2019 Access 365)
- Activex控件或Dll 在某些電腦無法正常註冊的解決辦法(regsvr32註冊時卡?。?/a>
- office使用部分控件時提示“您沒有使用該ActiveX控件許可的問題”的解決方法
- RTF文件(富文本格式)的一些解析
- Access樹控件(treeview) 64位Office下齣現(xiàn)橫曏滾動條不會自動定位的解決辦法
- Access中國樹控件 在win10電腦 節(jié)點行間距太小的解決辦法
- EXCEL 2019 64位版(Office 2019 64位)早就支持64位Treeview 樹控件 ListView列錶等64位MSCOMMCTL.OCX控件下載
- VBA或VB6調(diào)用WebService(直接Post方式)併解析返迴的XML
- 早期PB程序連接Sqlserver齣現(xiàn)錯誤
- MMC 不能打開文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由於文件不存在,不是一箇MMC控製颱,或者用後來的MMC版
- sql server連接不瞭的解決辦法
- localhost與127.0.0.1區(qū)彆
- Roych的淺談數(shù)據(jù)庫開髮繫列(Sql Server)
- sqlserver 自動備份對備份目録沒有存取權(quán)限的解決辦法
- 安裝Sql server 2005 express 和SQLServer2005 Express版企業(yè)管理器 SQLServer2005_SSMSEE
聯(lián)繫人: | 王先生 |
---|---|
Email: | 18449932@qq.com |
QQ: | 18449932 |
微博: | officecn01 |