Arquivo do autor:ricardoaam

Você já deslocou bits hoje ?

Postarei um exemplo prático em C de como jogar o conteúdo de um char* em um int, deslocando os bits.

0. #include <stdio.h>
1.
2.  int main( int argc, char* argv[] )
3.  {
4.         char* test = “test”;
5.         int tmp = 0;
6.
7.         tmp |= test[0] << 24 | test[1] << 16 | test[2] << 8 | test[3];
8.
9.         printf(“Result: %d\n”, tmp);
10.        return 0;
11. }

Na linha 7 vamos pegando cada caractere da palavra contida na variável test e atribuindo separadamente em cada byte da variável inteira tmp.

Uma outra maneira é ir deslocando aos poucos todo o conteúdo de tmp, como por exemplo:

tmp |= test[0];
tmp <<= 8;
tmp |= test[1];
tmp <<= 8;
tmp |= test[2];
tmp <<= 8;
tmp |= test[3];

Ao executarmos esses programas no terminal, ambos imprimirão na tela a seguinte mensagem:

Result: 1952805748

A variável tmp, depois de ser totalmente atribuída vai conter o valor 74657374 em hexa, o que, convertendo pra decimal vira 1952805748.

O valor em hexa se deve aos valores de cada caractere (da variável test) em hexa, na tabela ASCII.

t = 74
e = 65
s = 73

Bom, e qual a aplicação prática disso tudo ?

Por exemplo, agora é possível juntar os códigos de press e release de cada tecla do seu teclado, numa única variável. 😉

Boa sorte.

Anúncios

Fazendo rollback no SVN

Pra iniciar minha participação nesse blog, vou começar com uma dica que pode ajudar muitos “computeiros” de plantão.

Ontem no serviço me deparei com uma situação inusitada. Tive que fazer um rollback no SVN.

Pra quem não sabe, rollback é um termo que significa “desfazer” alguma coisa em certo local (por exemplo um servidor). Mas também pode significar “arruma essa cagada aê tchê!!!”.

E SVN é a sigla do Subversion, que um sistema de controle de versão muito usado por aí.

Enfim, mãos à obra.

Primeiramente temos que descobrir os números das revisões do nosso arquivo, e fazemos isso digitando

svn log -v nome_do_arquivo

assim, vocês verão algo parecido com isso

r9606 | rmontenegro | 2008-06-17 15:30:23 -0300 ( Tue, 17 Jun 2008 ) | 1 line
Changed paths:
M nome_do_arquivo

————————————————————————
r9604 | rmontenegro | 2008-06-17 14:45:25 -0300 ( Tue, 17 Jun 2008 ) | 1 line
Changed paths:
M nome_do_arquivo

aonde r9606 é a última revisão comitada, e r9604 a penúltima.

Bom, agora, nós vamos reverter localmente o nosso arquivo, digitando

svn merge -r9606:9604 nome_do_arquivo

Pronto, localmente ele vai estar com o conteúdo antigo. Agora é só comitar.

svn ci -m “uma breve descricao” nome_do_arquivo

MAS ATENÇÃO !!! Não esqueçam que localmente o arquivo está com as mudanças antigas.
Caso você queira mudar apenas no servidor, e localmente continuar com as mudança feitas antes de comitar da primeira vez, é só fazer o merge novamente, agora para a revisão que você deseja.

E o legal é que podemos reverter vários arquivos juntos, por exemplo passando um intervalo maior de revisões.

É isso aí pessoal, divirtam-se. (Mas muito cuidado, hehehehe).