Atualizado: 18/10/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Caracteres

Assim como qualquer outro dado, os caracteres em memória são representados por sequências de bits — zeros e uns organizados em uma ordem específica. Na maioria dos sistemas, um caractere ocupa 1 ou 2 bytes, e a conversão entre números e símbolos é feita por meio de tabelas de codificação, como ASCII ou Unicode.


Conversão entre Números e Caracteres

A tabela ASCII (American Standard Code for Information Interchange) é um dos métodos mais simples e difundidos para representar caracteres. Cada símbolo possui um número associado: por exemplo, a letra A corresponde a 65, e a letra B a 66. Os dígitos também possuem códigos próprios — 0 equivale a 48, 1 a 49, e assim por diante. Cada caractere ASCII ocupa 1 byte.

Tabela ASCII Completa

A tabela a seguir mostra todos os códigos decimais, hexadecimais e binários para os caracteres ASCII padrão (0–127).

Símbolos de Controle (0–31)

DECHEXBINSímboloDescrição
00000000000NULByte nulo
10100000001SOHInício de cabeçalho
20200000010STXInício de texto
30300000011ETXFim de texto
40400000100EOTFim de transmissão
50500000101ENQPedido
60600000110ACKConfirmação
70700000111BELSinal / Campainha
80800001000BSRetrocesso
90900001001HTTabulação horizontal
100A00001010LFNova linha
110B00001011VTTabulação vertical
120C00001100FFNova página
130D00001101CRRetorno de carro
140E00001110SODesligar alternância
150F00001111SILigar alternância
161000010000DLEControle de enlace
171100010001DC1Controle de dispositivo 1
181200010010DC2Controle de dispositivo 2
191300010011DC3Controle de dispositivo 3
201400010100DC4Controle de dispositivo 4
211500010101NAKConfirmação negativa
221600010110SYNSincronização
231700010111ETBFim de bloco de transmissão
241800011000CANCancelamento
251900011001EMFim de mídia
261A00011010SUBSubstituição
271B00011011ESCEscape
281C00011100FSSeparador de arquivo
291D00011101GSSeparador de grupo
301E00011110RSSeparador de registro
311F00011111USSeparador de unidade

Símbolos Imprimíveis (32–127)

DECHEXBINSímboloDescrição
322000100000(espaço)Espaço
332100100001!Exclamação
342200100010"Aspas duplas
352300100011#Cerquilha
362400100100$Cifrão
372500100101%Porcentagem
382600100110&E comercial
392700100111'Apóstrofo
402800101000(Parêntese esquerdo
412900101001)Parêntese direito
422A00101010*Asterisco
432B00101011+Sinal de mais
442C00101100,Vírgula
452D00101101-Hífen
462E00101110.Ponto
472F00101111/Barra
4830001100000Dígito zero
4931001100011Dígito um
5032001100102Dígito dois
5133001100113Dígito três
5234001101004Dígito quatro
5335001101015Dígito cinco
5436001101106Dígito seis
5537001101117Dígito sete
5638001110008Dígito oito
5739001110019Dígito nove
583A00111010:Dois-pontos
593B00111011;Ponto e vírgula
603C00111100<Menor que
613D00111101=Igual
623E00111110>Maior que
633F00111111?Interrogação
644001000000@Arroba
654101000001ALetra A
664201000010BLetra B
674301000011CLetra C
684401000100DLetra D
694501000101ELetra E
704601000110FLetra F
714701000111GLetra G
724801001000HLetra H
734901001001ILetra I
744A01001010JLetra J
754B01001011KLetra K
764C01001100LLetra L
774D01001101MLetra M
784E01001110NLetra N
794F01001111OLetra O
805001010000PLetra P
815101010001QLetra Q
825201010010RLetra R
835301010011SLetra S
845401010100TLetra T
855501010101ULetra U
865601010110VLetra V
875701010111WLetra W
885801011000XLetra X
895901011001YLetra Y
905A01011010ZLetra Z
915B01011011[Colchete esquerdo
925C01011100\Barra invertida
935D01011101]Colchete direito
945E01011110^Circunflexo
955F01011111_Sublinhado
966001100000`Acento grave
976101100001aLetra a
986201100010bLetra b
996301100011cLetra c
1006401100100dLetra d
1016501100101eLetra e
1026601100110fLetra f
1036701100111gLetra g
1046801101000hLetra h
1056901101001iLetra i
1066A01101010jLetra j
1076B01101011kLetra k
1086C01101100lLetra l
1096D01101101mLetra m
1106E01101110nLetra n
1116F01101111oLetra o
1127001110000pLetra p
1137101110001qLetra q
1147201110010rLetra r
1157301110011sLetra s
1167401110100tLetra t
1177501110101uLetra u
1187601110110vLetra v
1197701110111wLetra w
1207801111000xLetra x
1217901111001yLetra y
1227A01111010zLetra z
1237B01111011{Chave esquerda
1247C01111100|Barra vertical
1257D01111101}Chave direita
1267E01111110~Til
1277F01111111DELDelete

Conversão de Caracteres

A tabela ASCII facilita certas manipulações binárias. Por exemplo, as letras maiúsculas e minúsculas diferem apenas no 6º bit:

A = 01000001
a = 01100001

Para converter minúsculas em maiúsculas, basta limpar o 6º bit; para converter maiúsculas em minúsculas, basta defini-lo.

Isso pode ser feito adicionando ou subtraindo 32 do código do caractere.

Além disso, os códigos dos dígitos começam em 48 (ou 0x30). Assim, para converter entre número e caractere numérico, basta somar ou subtrair 48.


Exemplo: Converter Caractere em Número

Podemos transformar um símbolo ASCII numérico em seu valor binário real com uma operação lógica AND.

Linux:

global _start

section .text
_start:
    mov rdi, "2"     ; código ASCII de '2' = 50 (00110010)
    and rdi, 0xF     ; zera o nibble alto (00001111)
    mov rax, 60
    syscall

O valor binário resultante é 00000010, equivalente ao número 2. A máscara 0x0F (00001111) funciona para todos os dígitos.

Windows:

global _start

section .text
_start:
    mov rax, "2"
    and rax, 0xF
    ret

Exemplo: Converter Número em Caractere

Para o caminho inverso, aplica-se a operação OR com a máscara 0x30:

Linux:

global _start

section .text
_start:
    mov rdi, 2         ; número 2 = 00000010
    or rdi, 0x30       ; define o nibble alto em 0011 = 00110010
    mov rax, 60
    syscall

O resultado é 50, que corresponde ao caractere “2”.

Windows:

global _start

section .text
_start:
    mov rax, 2
    or rax, 0x30
    ret

Converter Letras entre Maiúsculas e Minúsculas

Para converter maiúsculas em minúsculas, define-se o 6º bit com OR 0x20:

Linux:

global _start

section .text
_start:
    mov rdi, "A"       ; código 65 = 01000001
    or rdi, 0x20       ; 01000001 + 00100000 = 97 (a)
    mov rax, 60
    syscall

Para o inverso, usa-se AND 0xDF (11011111):

Linux:

global _start

section .text
_start:
    mov rdi, "a"       ; código 97 = 01100001
    and rdi, 0xDF      ; 01100001 * 11011111 = 01000001 (A)
    mov rax, 60
    syscall

Outra forma é adicionar ou subtrair 32 do valor ASCII:

global _start

section .text
_start:
    mov rdi, "A"      ; RDI = 65
    add rdi, 32       ; 65 + 32 = 97 (a)
    mov rax, 60
    syscall

Resumo

  • Cada caractere é armazenado como um número binário correspondente ao seu código ASCII.
  • Aspas simples ou duplas podem ser usadas para representar caracteres.
  • A diretiva db define variáveis do tipo byte.
  • As letras diferem pelo 6º bit: OR 0x20 converte para minúscula; AND 0xDF para maiúscula.
  • +48 e -48 permitem converter entre números e caracteres numéricos.
  • As máscaras 0x0F e 0x30 facilitam a manipulação direta de códigos ASCII.
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com