:: novos artigos ::
|
|
|
:: novos scripts ::
|
|
|
|
|
Na segunda parte de artigos sobre operadores bit-a-bit, irei abordar um outro lado desses operadores: caracteres. No primeiro artigo o foco foi “números”, apresentando a maneira como os operadores bit-a-bit lidam com eles. No caso de caracteres eles funcionam de uma maneira um pouco diferente, e é exatamente dessas diferenças que trato nesse novo artigo.
|
|
|
Continuação do artigo: http://www.phpbrasil.com/articles/article.php/id/1392
Como dito no artigo anterior, os operadores bit-a-bit tratam diretamente bits, que são os 0s e 1s lidos pelo processador.
Acredito que qualquer um que esteja lendo esse artigo, e que tenha uma noção básica teórica sobre como funcionam as coisas dentro de um computador, sabe que normalmente (não mais definitivamente) é usado caracteres seguindo a tabela ASCII (Unicode é história pra outro artigo), que são exatamente 255 caracteres que servem pra representar a escrita padrão Ocidental com mais alguns caracteres especiais e ponto.
A cada um desses caracteres é designado ou atribuído um número que vai de 0 (NULL) à 255, 11111111 em binário ou FF em hexadecimal (vazio). Se você leu o artigo anterior (e eu recomendo pra entender este), então deve lembrar que em cores RGB também é usado algo parecido.
http://img329.imageshack.us/img329/6633/asciipq9.gif
Aí em cima está a tabela ASCII com todos os seus 255 caracteres.
Indo direto aos exemplos, o problema: Vamos criar uma função que faça a mesma coisa que funções como strtolower, strtoupper, ucwords, etc. Pra isso também iremos usar um pouco de expressões regulares (excelente tutorial/livro em guia-er.sourceforge.net) e obviamente, operadores bit-a-bit.
Primeiro temos que analisar a relação entre letras maiúsculas e letras minúsculas dentro da tabela ASCII. Tomemos como exemplo a letra “A”. Como maiúscula ela tem o código 65 e como minúscula 97. Diferença de 32 (97-65) que equivale ao caractere espaço (procure sempre olhar esses dados na tabela). Vamos visualizar esses números como binários:
65: 1000001
97: 1100001
32: 0100000
|
Agora você precisa lembrar como funcionam os operadores “&”, “^” e “|”. Supondo que você queira passar uma letra maiúscula para minúscula você precisará usar o operador “|”. Lembre-se que com esse operador, na posição que tiver pelo menos um número “1” será colocado obviamente um número “1” e onde tiver dois 0s um número “0”. Neste caso você tem a letra “A” (ASCII 65) e vai passar para maiúscula, portanto você deve comparar com “ “ (ASCII 32), analise o esquema abaixo seguindo a regra do operador “|”, assim você chega ao valor 97:
65: 1100001
32: 0100000
97: 1100001
|
Agora supondo que você tenha a letra “a” (ASCII 97) e queira passar para maiúscula, nesse caso você precisa usar o operador “^”. Lembre-se, com esse operador é atribuído um número “1” onde tiver um “1” e um “0”. Seria basicamente o mesmo do OR, mas se tiver dois números “1” na posição será então atribuído o valor “0”. Observe agora os valores abaixo e analise seguindo a regra do operador “^”, você vai chegar ao valor 65:
97: 1100001
32: 0100000
65: 1000001
|
Na próxima página eu mostro como isso pode ser feito em PHP e passo a função final de strtolower e strtoupper.
Imprimir |
Enviar para um Amigo
|
Comentários de Usuários
Tão ruim assim?
O artigo ficou tão ruim assim pra não receber nenhum comentário e ter nota 6.33?
.
Alisson, este artigo está ótimo...
Porém é algo raramente utilizado em php, acredito que poucos hoje já tiveram problemas que isto ajudaria a resolver!
Abraço,
Felipe
bom!
Mto bom...ja utilizava esse metodo aqui no trampo! ^^
|
|