DetailPage-MSS-KB

Base de Dados de Conhecimento

ID do artigo: 145745 - Última revisão: quarta-feira, 7 de maio de 2003 - Revisão: 2.0

 

Sumário

Por anos, os programadores BASIC vêm utilizando o crescente e conjunto de caracteres Funções Chr para acessar e manipular o ASCII. Com o advento de aceitação de Unicode em sistemas operacionais importantes e aplicativos, a necessidade de versões aprimoradas das funções ASC e Chr desenvolveu. Para atender a essa demanda, Microsoft Visual Basic (4.0 e superiores) para o Windows inclui o AscB/ChrB e ChrW/AscW funções.

Mais Informações

Unicode é um padrão que é projetado para substituir o padrão ANSI para codificação de caracteres em um formulário numérico. Como o ANSI padrão usa apenas um único byte para representar cada caractere, está limitado a um máximo de 256 caracteres diferentes. Embora isso seja suficiente para as necessidades de uma audiência fala inglês, ele fica curto quando o mercado de software em todo o mundo é considerado. Com o padrão Unicode, cada caractere é representado por dois bytes, para que o caractere Unicode inteiro definir inclui 65.536 possíveis locais.

Microsoft Windows NT, Microsoft Windows 2000 e Microsoft OLE 2.0 são totalmente Unicode com base, e Visual Basic (4.0 e superior) representa todas as seqüências internamente no formato Unicode. As funções AscW e ChrW permitem acesso aos caracteres intervalo completo de Unicode. Essas funções funcionam da mesma maneira como as funções ASC e Chr originais, exceto que oferecem suporte argumentos de 0 a 65.535 em vez de apenas de 0 a 255. Muitos objetos do Visual Basic (como a janela de depuração e a caixa de texto e rótulo) retornam um "?" quando esses objetos não sabe como exibir um caractere Unicode.

Como todas as seqüências agora são representadas internamente no formato Unicode, não é tão simples quanto costumava ser para representar dados binários em uma seqüência de caracteres. Usando a função Chr para atribuir dados como uma seqüência de caracteres não resulta no mesmo comportamento como antes. Por exemplo:
   stringvar = Chr(65)
				

resulta em uma seqüência longa de dois bytes, onde 1 byte tem um valor de 2 bytes e 65 tem um valor de 0 (isso é a representação Unicode de letra "A"). Certifique-se ter em mente que conversão de ANSI para Unicode não sempre exige apenas adicionando um segundo byte com um valor de zero como nesse caso. Por exemplo, a maioria dos códigos de caracteres ANSI no intervalo de 130 159 ter valores de Unicode completamente diferentes. Tente executar um 'Debug.Print AscW(Chr(130))' e que um valor de 8218 é exibido.

Atualmente, o Microsoft Windows requer um pouco processador endian, que significa que em uma entidade byte vários o primeiro byte é o menos significativo e significância aumenta em sucessivos bytes. Isso explica por que o caractere Unicode "A" é representado internamente como o seguinte:
   -------------------
   |   65   |    0   |
   -------------------
     byte 0     byte 1
				

As funções AscB e ChrB podem ser usadas para replicar a finalidade para ser realizado por funções ASC e Chr, porque essas funções permitem a manipulação de quantidades de byte. Se você desejar uma seqüência de quatro bytes que tenha os valores binários de 65, 66, 67 e 68 consecutivamente, em seguida, usando a função Chr não funcionará. Em vez disso, você deve usar a função ChrB. Por exemplo:
   stringvar = ChrB(65) & ChrB(66) & ChrB(67) & ChrB(68)
				

Como alternativa, você pode usar a capacidade de criar matrizes do novo tipo de dados byte e manipular os dados binários dessa maneira.

Abaixo está uma explicação dos resultados de alguns usos simples dessas funções de mais esclarecimentos sobre essas informações.

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

Nada novo aqui, exceto que a função Chr está retornando um caractere Unicode que ocupa dois bytes em vez de um caractere ANSI de um byte.

Imprimir Asc(ChrB(255))--> 5 - chamada de procedimento inválido.

Esse uso retornará um erro porque a função ASC sempre espera pelo menos um parâmetro de dois bytes e a função ChrB somente está retornando um único byte.

Imprimir Asc(Chr(256))--> 5 - chamada de procedimento inválido.

Embora a função Chr retorna um caractere Unicode de dois bytes, leva ainda apenas números entre 0 e 255 para o argumento (Observe que em um sistema DBCS habilitado, crescente/Chr manipular dois bytes DBCS caracteres, convertê-las e para Unicode). Usando a função ChrW permite o acesso os locais de caractere Unicode completo 65.536.

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

Essa é a nova versão da primeira instrução nesta seção. A função ChrW leva um valor de 0 a 65.536 e retorna esse caractere (em sistemas de 32 bits). A função AscW interpreta esse caractere de dois bytes como um caractere Unicode e retorna o valor Unicode correto desse caractere.

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

O que está acontecendo aqui é que a função ChrW está sendo avaliada primeiro. ChrW(256) é o caractere "A" e então, a função reduz a Asc("A") e o número Unicode (e ANSI) para "A" é 65. Pois Visual Basic não terá como exibir o caractere representado por Chr(5000) ele apenas exibirá um "?", e conforme o esperado, o Unicode e ANSI valor para "?" é 63.

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

Todos esses retornam valores podem ser explicadas pela Noções básicas sobre como cada caractere é representado internamente (consulte a referência de little-endian acima) e pelo fato de que a função AscB examina somente o primeiro byte do caractere que recebe. Visualmente pareça o diagrama a seguir:
             -------------------
   Chr(65)   |   65   |    0   |
             -------------------
   Chr(256)  |    0   |    1   |
            -------------------
   Chr(257)  |    1   |    1   |
             -------------------
   Chr(555)  |   43   |    1   |
             -------------------
   Chr(65535)|   255  |  255   |
             -------------------
               byte 0    byte 1
				

Função AscB apenas retorna tudo o que é o primeiro byte do caractere.

Impressão ChrB(65)--> ""

Visual Basic imprime nada para esta chamada para a função ChrB porque a função ChrB somente está retornando uma seqüência de um byte. Seqüências de um byte assim significam nada para o Visual Basic porque elas não constituem um caractere Unicode válido (ou seqüência de caracteres).

Impressão ChrB(0) & de ChrB(65)--> "A"

Nesse caso, nós são concatenando duas seqüências de um byte em uma única seqüência de dois bytes. Como o padrão de bit resultante é o mesmo que o padrão de bits para Unicode "A", que é o que imprime Visual Basic.

A informação contida neste artigo aplica-se a:
  • 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 de 16 bits Enterprise Edition
  • Microsoft Visual Basic 4.0 de 32 Bits Enterprise Edition
Palavras-chave: 
kbmt kbinfo KB145745 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 145745  (http://support.microsoft.com/kb/145745/en-us/ )
Compartilhar
Opções de suporte adicionais
Fóruns de Suporte do Microsoft Community
Contate-nos diretamente
Localize um parceiro certificado da Microsoft
Microsoft Store