Conte de 0 até 10... Agora me diga, quais os números que você utiliza? Se você pensou : 0,1,2,3,4,5,6,7,8,9 E DEZ; VOCÊ ERROU!! :D Você deveria ter contado 0,1,2,3,4,5,6,7,8,9 e um ao lado do zero porque é assim que se deve fazer, pelo bem da matemática dos seus neurônios (dezenas, centenas, milhares, dez, cem, mil e outros nomes bonitos, significam apenas um jeito de classificar na lingüagem portuguesa) :D... São esses os números do sistema decimal \o/ !!! Sim, os números do grande sistema decimal, que os seres humanos utilizam na vida real, são 10 : 0,1,2,3,4,5,6,7,8 e 9!! Tudo bem, você pegou a idéia...
2.0.1)Hexadecimal.Agora, vamos falar sobre o hexadecimal... Do grego (HEXA = seis) mais o sistema DECIMAL, ou seja, 10 + 6 = 16 \o/!! Mas, se ele contém todos os números decimais, quais são os outros seis? Simples, as letras A,B,C,D,E,F (lembrando, não importa se digitar A ou a, para não confudir com expressão matemática, é utilizado um pequeno "h" ao lado do último número ou um "0x" na frente :D). Bem, mas e como ele é organizado? Aí vai : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F!! Agora, lembre-se disso : 0xA=10 em decimal e assim sucessivamente(x+1) até o 0xF=15... Isso é para que nunca confunda o número de componentes (16) com o valor do último (15), a propósito : 0x10=16 em decimal... Bem, já dá para ir contando até o infinito ;D...
2.0.2)Binário.Do grego BI(=Dois) mais nário (Seria numeração?)... Este sistema tem apenas dois componentes que, são matematicamente representadas por 0 e 1 (note, com isso, que dá para entender sua descendência não-matemática :D)... Bem, caso você ainda não saiba, a parte física de uma máquina qualquer só entende isso...
2.1.0)Hexadecimal e Binário.Agora vamos ao hexadecimal e a origem de sua insistente existência :D! Converter binário para decimal é fácil mas, o oposto não é muito interessante... Aí vem a criação do hexadecimal e a sua utilização prática!! Por ser mais compacto que o decimal e converter facilmente entre ele e binário :
| Decimal | Binário | Hexadecimal |
|---|---|---|
| 0 | 0000 | 0x0 |
| 1 | 0001 | 0x1 |
| 2 | 0010 | 0x2 |
| 3 | 0011 | 0x3 |
| 4 | 0100 | 0x4 |
| 5 | 0101 | 0x5 |
| 6 | 0110 | 0x6 |
| 7 | 0111 | 0x7 |
| 8 | 1000 | 0x8 |
| 9 | 1001 | 0x9 |
| 10 | 1010 | 0xA |
| 11 | 1011 | 0xB |
| 12 | 1100 | 0xC |
| 13 | 1101 | 0xD |
| 14 | 1110 | 0xE |
| 15 | 1111 | 0xF |
Lembretes : Números hexadecimais e binários, são vistos/lidos da direita para a esquerda, caso não tenha percebido!!! E, para um computador, não importa adicionar zeros (0) adiante do fator relevante, EM HEXADECIMAL!! O que eu quero dizer é que ele lê 0xA e 0x0A DA MESMA FORMA! (CLARO QUE ESTOU MENCIONANDO NUMA LIVRE INTERPRETAÇÃO, ou seja, leitura simples de dados, sem restrições pré-definidas como o tamanho da memória ou nas instruções da máquina :P...)
2.1.1)Decimal para Binário, Hexadecimal ou qüalquer outro sistema :D.Se trata de uma método matemático utilizado para esse tipo de conversão, ele é universal, basicamente...
2.2.0)BIT, BYTE, KILOBIT, KILOBYTE, MEGABIT, MEGABYTE, GIGABIT, GIGABYTE, TERA...Caso venha na sua cabeça, mais uma vez, vou afirmar que todas usam prefixos gregos... Já o BIT (BInary digiT, alguém afirmou... Não achei convincente :P...), esse é o menor valor que uma informação pode ter, nos computadores. O BIT representa o sistema binário no mundo virtual : ele pode ter qüaisquer DOIS valores (1 e carro, verde e inconstitucionalicimamente; DOIS pares de valores bem diferentes...) mas, APENAS DOIS!! Percebeu, na tabela acima, que eu sempre coloquei quatro valores binários? Essa junção de quatro BITs se chama NIBBLE (pedaço), pode não parecer muito importante mas, todo valor hexadecimal (não importa se é o 0x0 que representa 0000) em um editor hexadecimal, representa um NIBBLE!!! Agora, como o padrão do PC que usamos, tem uma maior afinidade com o BYTE (2 NIBBLEs=8 BITs=1 BYTE), é muito comum ver dois valores hexadecimais juntos, formando a representação de um BYTE. Pausa para colocar a cabeça em função : 1 NIBBLE = 16 valores possíveis pois 2 x 2 x 2 x 2 = 16 (2=valores possíveis de um BIT), 1 BYTE = 256 valores possíveis pois 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 256 (ou, em hexadecimal, de 0x00 até 0xFF); isso, em matemática, se chama combinação, base para análise combinatória... Mais uma coisa : 16 BITs também é chamado de WORD (palavra), 32 BITs é uma DWORD (palavra dupla) e assim sucessivamente :D... Pronto, agora vai aí uma tabelinha :
| BITs | NIBBLEs | BYTEs | HEXADECIMAL | Valores Possíveis |
|---|---|---|---|---|
| 8 BITs | 2 NIBBLEs | 1 BYTE | 00h-FFh | 256 |
| 16 BITs | 4 NIBBLEs | 2 BYTEs | 0000h-FFFFh | 65.536 |
| 32 BITs | 8 NIBBLEs | 4 BYTEs | 00000000h-FFFFFFFFh | 4.294.967.296 |
Algo que importa muito, quando você for mexer em qualquer coisa relacionada a edição hexadecimal, é sempre considerar uma quantidade PAR pois, dificilmente (pelo que eu mostrei aí você deve ter percebido) alguém vai criar algo em valores ímpares (é uma conveniência de interesse matemático, se você ainda não sabe)!
2.3.0)Organizando Bytes.Agora, vamos colocar um pouco de matemática virtual aqui, para aprender direitinho os próximos assuntos deste tópico... Vamos imaginar 1 BYTE - 0xA0 em BITs :
|_|_|_|_|_|_|_|_|O BIT 8 é chamado BIT de menor importância/ordem e o BIT 1 é o chamado BIT de maior importância/ordem (simples assim) :D! Isso também é aplicado em cadeias maiores da família (Nibbles de maior importância, BYTEs de menor importância...)! Sempre o de menor importância é o primeiro que aparece, no nosso jeito de ver o mundo (da esquerda para a direita), e o de maior importância é o último !!! Aí você se pergunta : "Pra quê essa idiotice?", já vou explicar :D!
2.3.1.0)Endianess - finalização dos BYTEs, na memória!!Apesar de estar parecendo muito chato (e desnecessário para alguns), essas minhas explicações são essenciais para que você aprenda a fazer a coisa certa... Essencialmente, este assunto... Só existem duas organizações oficiais para os seus queridos BYTEs (existem outras que eu vou explicar, se necessário) : o método Intel (Little-endian), bem mais comum e usado pela maioria, e o método Motorola (Big-endian), exatamente o oposto do Intel, mais usado para sistemas orientais.
2.3.1.1)Método Intel, Baixa Finalização (Little-endian).Hoho, você vai ver como é fácil... Pegamos um valor qualquer em hexadecimal... 0xAF089CD1 é o escolhido! Aí organizaremos ele na memória, com este método : 0x D1 9C 08 AF (separei pra você compreender melhor), entendeu? Vamos explicar : o BYTE de menor importância vem primeiro ! O propósito disso? Simples, vai ficar uma organização igüal como nós vemos o mundo (da esquerda para a direita), assim facilita quando se quer criar aplicações de texto, por exemplo... Pois, os BYTEs serão lidos do começo até o fim na memória :D...
2.3.1.2)Método Motorola, Alta Finalização (Big-endian).Como eu havia dito, é exatamente o contrário do método Intel... Vamos pegar aquele exemplo (0xAF089CD1) acima e organizar aqui : 0x AF 08 9C D1, mudou nada, não é mesmo? Continua aquela organização esquisita para nosso jeito de ver o mundo :D... Já para os asiáticos e árabes, isso é uma maravilha pois, eles vêem o mundo assim (da direita para a esquerda :D) e isso vai facilitar na hora de utilizar programas, mais uma vez, graças à leitura da memória :D...
2.3.1.3)Método de Troca de Bytes - Byte Swap (...).É o utilizado no Nintendo 64.. (Breve, quando eu explorar os documentos em busca de mais informações!)
2.3.1.4)Método não mais usado, Média Finalização (Middle-endian).Mais uma vez, vamos mostrar nosso exemplo (0xAF089CD1) aqui : 0x 9C D1 AF 08, entendeu a moral? Vou explicar : ele inverte o grupo de BYTEs de menor importância com o de maior... Ou, simplesmente, divide ao meio os BYTEs e troca a metade do começo pela metade do fim :D... Já não é mais usado mas, sempre bom ter um conhecimento disso!
2.4.0)Tabela/sistema de caracteres e codificação!Como havia explicado na introdução, os jogos podem ter tabelas/sistemas de caracteres diferentes entre si, até na mesma máquina! Agora, o quê seria esse sistema? É simples, o Sistema Operacional precisa definir códigos para a entrada/saída de dados... Logo, alguns "gênios" resolveram definir, de acordo com o número de teclas (e pela pobre imaginação dos americanos que fizeram isso), sistemas básicos de entrada/saída de dados para o PC. O primeiro BIOS foi americano e só admitia a saída de caracteres de 1 BYTE (0x00-0xFF), o ASCII da IBM foi escolhido para ser o sistema. Mais aí, o mundo foi globalizado... Logo, a IBM e seu ASCII estavam ultrapassados e o Software passou por cima do Hardware! Uma empresa "querida", chamada M$, resolveu codificar seu sistema para todos os padrões mundiais possíveis :D! Assim nasceu esse método de codificação que é utilizado no WORD, nas páginas da internet, no seu Sistema Operacional!! Traduzindo as chamadas em ASCII do BIOS, agora inúteis, para diferentes codificações possíveis! Alguns pontos necessários a entender, para que não haja dúvidas : esse negociozinho de criar um sistema era uma forma de tomar o controle do modo de produção dos PCs! Hoje, tudo é anarquia, e (até para a melhora da segurança, graças à M$, Apple e GNU) não é o BIOS que definirá operação x ou y no seu sistema! O ASCII funciona, no seu PC, em modo Hardware!!
2.4.1.0)O American Standard Code for Information Interchange = Código Básico Americano para Troca Internacional de Informações!!Ele é quem dita os 128 primeiros caracteres (0x00-0x7F) na entrada (teclado) de TODOS os BIOS americanos. Bom, vamos à sua organização : os 32 primeiros caracteres (0x00-0x1F) são usados para controlar o Sistema Operacional (Caps Lock, TAB, ENTER, BACK Space mas não o espaço :D); mais 32 (0x20-0x3F) para pontuações e a numeração (agora sim, os números e o espaço :D); mais 32 (0x40-0x5F) para os caracteres em CAIXA ALTA (A,B,C,D,E,F,G,H...) e alguns especiais; e mais 32 (0x60-0x7F) para os caracteres pequenos (a,b,c...), cinco símbolos estúpidos e o DELETE no final!! Oras, mas se o ASCII só define 128 dos 256 BYTEs possíveis, o quê acontece com os outros 128? Simples, esses ficariam por conta do Sistema Operacional... Ficariam porque, como já foi dito, não é o BIOS que vai ditar isso :D...
Este é o ASCII.
O windows tem seu sistema bacana de codificação... O sistema original e básico do mesmo é o ANSI :D! Podemos dizer que a codificação WIN-000 é o ANSI! Certo, nem tudo é festival :D!! O ANSI é limitado como o ASCII : só utiliza 1 BYTE por caractere. A sua organização (aliás a única que eu vou poder colocar aqui :D) é : os 128 primeiros caracteres como o ASCII + alguns caracteres para a utilização internacional (para os americanos)... A tabela completa, está inclusa com esse documento ou com o Thingy 32 (eu tirei do Thingy 32 :D)...
2.4.2.0)Unicode.O Código Único contêm o maior número de caracteres já organizados neste planeta : TODOS! Criado inicialmente na Califórnia (EUA), ele foi se expandindo e hoje já tem versões, das quais, existe a principal e mais completa de todos, abrangendo 4 BYTEs por caractere :/ ... Esta já finalizou todos os caracteres encontrados na face deste planeta!! Ela apenas sofre modificações quando são encontradas novidades sobre as lingüagens antigas...
2.4.3.0)Shift-JIS (JIS=Japanese Industrial Standard) e BIG5.Mais um sistema criado pela M$ para o óbvio nipônico :D... O Shift-JIS é uma versão global do até então JIS, voltada para relações exteriores... Utilizando 2 BYTEs por caractere, contêm todos os kanjis utilizados pelos japoneses, mais caracteres gregos e latinos (e seus descendentes) e alguns símbolos... O BIG5, sistema chinês dessa vez :D, foi criado pelo Instituto da Informação de Taiwan. Adotado nos tempos de DOS, ele ficou mais popular que qualquer outro sistema chinês... Ele utiliza os caracteres do chinês tradicional, 2 BYTEs são usados por caractere e ganhou uma extensão feita pelo governo de Hong Kong! Ahh, se chama BIG5 porque BIG=grande em inglês :P... PARA SABER A TABELA DO SHIFT-JIS, PEGUE O JWPCE E VÁ NA OPÇÃO DE ADICIONAR CARACTERES!! Lá tem os valores dos caracteres para o Shift-JIS!
2.4.4.0)Extended Unix Coding - (EUC).Codificação UNIX Extendida. Como se pode entender, foi gerada no ambiente UNIX! Não abrange milhares de idiomas, apenas os Tigres Asiáticos : Coréia (as duas), China e Japão. É muito usada nos sistemas UNIX orientais, em redes locais (sem acesso internético)! A codificação é variável, podendo ter 1 ou 2 BYTEs por caractere, apenas :D. Não confundir com o famoso dicionário japonês EDICT!
2.4.5.0)Extended Binary Coded Decimal Interchange Code (EBCDIC).Erm, Decimal Codificado em Binário Extendido para Código de Troca Internacional. Que lindo... É simples : esse sistema usa 1 BYTE por caractere (2 BYTEs nas suas versões orientais) e, seu modelo robusto, se dá por ser diferenciado a partir da divisão do BYTE usado, caracterizando a zona (país) com os 4 primeiros BITs e identificando o caractere com os outros 4 BITs! Parece uma coisa do outro mundo mas, é o sistema mais antigo que ainda é usado e o segundo criado :D. Foi feito pela IBM para os seus super-mainframes e é o predecessor do ASCII! Desenvolvido em 1964 (4 anos antes do ASCII). AHH, não confunda com o famoso dicionário japonês EDICT :D!
2.4Z)Conclusão...Preste bem atenção nesses sistemas que eu pûs, ele são os mais populares e existem jogos que os utilizam!! Pra saber a tabela completa deles, contudo, só pesquisando na NET porque eu não tenho elas x.x !!!
--------------------------------------------------------------------------