INFORMACE: Funkce rozdíly mezi ASC v AscB/AscW a Chr v ChrB/ChrW

Překlady článku Překlady článku
ID článku: 145745 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Pro roky základního programátory jste používali ASC a funkce Chr přistupovat a manipulovat s nimi ASCII, znakové sadě. S nástup přijetí Unicode v běžných operačních systémů a aplikací potřebu vylepšenou verzí funkce ASC a Chr vyvinula. K uspokojení této poptávky, Microsoft Visual Basic (4.0 a vyšší) pro systém Windows zahrnuje AscB/ChrB a funkce AscW/ChrW.

Další informace

Unicode je standard, který je navržen tak, aby nahradit standard ANSI pro kódování znaků ve formě číselné. Vzhledem k tomu, že jeden bajt standardu ANSI pouze používá k reprezentaci jednotlivých znaků, je omezena na maximálně 256 různých znaků. To je dostatečné pro potřeby Anglická řeči cílovou skupinu, spadá krátké při považován za trhu po celém světě softwaru. Standard Unicode každý znak reprezentován dvěma bajty, tak, aby celý znaková sada Unicode obsahuje 65 536 možných umístění.

Microsoft Windows NT, Microsoft Windows 2000 a Microsoft OLE 2.0 jsou zcela Unicode založené a Visual Basic (4.0 a vyšší) představuje všechny řetězce interně ve formátu Unicode. Funkce AscW a funkce ChrW umožnit přístup k znaky úplný rozsah Unicode. Tyto funkce pracovat stejným způsobem jako původní funkce ASC a Chr s tím rozdílem, že argumenty z 0 na 65 535 namísto podporují pouze od 0 do 255. Mnoho objektů jazyka Visual Basic (například okno ladění a popisek a textové pole) vraťte "?" při těchto objektů neznají způsob zobrazení znak Unicode.

Protože všechny řetězce jsou nyní představovaly interně ve formátu Unicode, není jednoduché, protože používá se k představují binární data v řetězci. Přiřadit data na řetězec pomocí funkce Chr nemá za následek stejné chování jako před. Například:
   stringvar = Chr(65)
				

Výsledkem dvoubajtový dlouhého řetězce, kde 1 bajt má hodnotu 65 a bajt 2 má hodnotu 0 (je Unicode reprezentace písmeno "A"). Nezapomeňte mějte na paměti, že převod ze standardu ANSI na Unicode vždy nevyplývá pouze přidávání druhý bajt s hodnotou nula, jako je tomu v tomto případě. Například většina kódy znaků ANSI v rozsahu 130 159 mít zcela jiné hodnoty Unicode. Pokuste se provádění a 'Debug.Print AscW(Chr(130))' zobrazit hodnotu 8218.

Microsoft Windows v současné době vyžaduje trochu endian procesoru, což znamená, že první bajt více entity bajt je nejméně významné a zvyšuje význam v po sobě následujících bajtů. To vysvětluje, proč znak Unicode "A" je vyjádřen interně následující:
   -------------------
   |   65   |    0   |
   -------------------
     byte 0     byte 1
				

Funkce AscB a ChrB lze použít k replikaci co používá k být dosaženo funkce ASC a Chr, protože tyto funkce umožňují manipulace množství jednoho bajtu. Chcete-li řetězec čtyř bajtů, který má binární hodnoty 65, 66, 67 a 68 postupně potom pomocí funkce Chr nemusí pracovat. Místo toho musíte použít funkci ChrB. Například:
   stringvar = ChrB(65) & ChrB(66) & ChrB(67) & ChrB(68)
				

Alternativně můžete použít možnost vytvoření polí nový typ dat byte, a manipulovat s nimi binární data tímto způsobem.

Níže je vysvětlení výsledků některé jednoduché použití těchto funkcí další vyjasnění této informace.

Tisk Asc(Chr(255))--> "255"

Nic nového zde, s tím rozdílem, že funkce Chr vrací znak sady Unicode, zabírá dvěma bajty namísto jednobajtových znaků ANSI.

Tisk Asc(ChrB(255))--> 5 - neplatná procedure call).

Toto použití vrátí chybu, protože funkce ASC vždy předpokládá, že nejméně jeden parametr dvoubajtový a ChrB funkce vrací pouze jednoho bajtu.

Tisk Asc(Chr(256))--> 5 - neplatná procedure call).

Přestože je funkce Chr vrátí dvoubajtový znak sady Unicode, trvá stále pouze čísla mezi 0 a 255 pro svůj argument (Všimněte si, že v systému povolena DBCS, ASC/Chr zpracovat dvoubajtový znaky DBCS, z Unicode a jejich převádění). Pomocí funkce ChrW umožňuje přístup k umístění úplné 65 536 znaků Unicode.

Tisk AscW(ChrW(256))--> "256"

Toto je nová verze první příkaz v tomto oddílu. Funkce ChrW má hodnotu od 0 do 65536 a vrátí znak (v systémech 32 bitů). Funkce AscW interpretuje tento dvoubajtový znak jako znak Unicode a vrátí správnou hodnotu Unicode pro znak.

Tisk Asc(ChrW(256))--> "65"
Tisk Asc(ChrW(5000))--> "63"

Co se děje, zde je, že funkce ChrW je vyhodnocována nejprve. ChrW(256) je znak "A" a tak funkci zmenší ASC("A") a číslo Unicode (a ANSI) pro "A" je 65. Protože jazyka Visual Basic neví, jak zobrazit znak reprezentován Chr(5000) zobrazí pouze "?", a podle očekávání, hodnotu Unicode a ANSI pro "?" je 63.

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

Všechny tyto vrácení hodnoty může být vysvětlit vysvětlení, jak je každý znak reprezentován interně (viz odkaz little-endian, výše) a skutečnost, že funkce AscB vyhledá pouze první bajt znaku obdrží. Vizuálně vypadá jako na následujícím diagramu:
             -------------------
   Chr(65)   |   65   |    0   |
             -------------------
   Chr(256)  |    0   |    1   |
            -------------------
   Chr(257)  |    1   |    1   |
             -------------------
   Chr(555)  |   43   |    1   |
             -------------------
   Chr(65535)|   255  |  255   |
             -------------------
               byte 0    byte 1
				

Bez ohledu první bajt znaku je pouze vrátí funkce AscB.

Tisk ChrB(65)--> ""

Visual Basic tiskne NIC pro toto volání funkce ChrB, protože funkce ChrB vrací pouze jednobajtových řetězec. Jeden bajt řetězce takto rozumí nic do jazyka Visual Basic protože jejich nepředstavují platné znaky Unicode (nebo posloupnost znaků).

Tisk ChrB(65) & ChrB(0)--> "A"

V tomto případě jsme jsou zřetězení dvou jednobajtových řetězců do jednoho řetězce dvoubajtový. Vzhledem k tomu, že výsledné bitový vzorec je stejný jako bitový vzorec pro Unicode "A", který je vytiskne jazyka Visual Basic.

Vlastnosti

ID článku: 145745 - Poslední aktualizace: 7. května 2003 - Revize: 2.0
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbinfo KB145745 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:145745

Dejte nám zpětnou vazbu

 

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