Byte Por Byte
Hoje vou comentar sobre um problema que parece simples à primeira vista, mas acaba ficando chato para implementar e fazer funcionar como o esperado. Trata-se de uma simples tarefa: ler do usuário um valor de cada tipo primitivo (int, float, char, double, e long double), imprimir o endereço reservado na memória para a variável e se usar mais de um byte, imprimir cada endereço e cada valor contido no byte.
No geral, é uma tarefa simples, exceto por precisar imprimir o valor da célula de cada byte.
Escrevi o código em C++.
Após tentar de várias maneiras e pesquisar bastante, com casting pra tudo que é lado, consegui resolver. Basta usar um ponteiro para char para armazenar o endereço inicial da variável, e incrementá-lo conforme a necessidade.
Exemplo para inteiro:
int valor = 1023;
char* endereco = ( char *) &valor;
// inversao da variavel
endereco += (sizeof(int)-1);
for(int i=sizeof(int)-1; i>=0; i--)
{
std::cout << "Endereco em hexadecimal: "
<< std::hex << static_cast<void *>( endereco )
<< ", valor armazenado em hexadecimal: "
<< std::hex << std::uppercase
<< std::setw(2) << std::setfill('0')
<< (static_cast<unsigned int>( *endereco ) & 0xFF)
<< endl;
endereco--;
}
Saída esperada:
Endereco em hexadecimal: 0x7fffc2baaebf, valor armazenado em hexadecimal: 00 Endereco em hexadecimal: 0x7fffc2baaebe, valor armazenado em hexadecimal: 00 Endereco em hexadecimal: 0x7fffc2baaebd, valor armazenado em hexadecimal: 03 Endereco em hexadecimal: 0x7fffc2baaebc, valor armazenado em hexadecimal: FF
Qualquer dúvida ou comentário que possa agregar, não exite em fazer.
Código fonte do trabalho todo: Download
Fontes:
http://stackoverflow.com/questions/8680220/how-to-get-the-value-of-individual-bytes-of-a-variable
http://stackoverflow.com/questions/7211934/c-memory-addresses
Gentoo Art
Aproveitando o embalo do último post, conky para o Gentoo, vou registrar uma dica de personalização muito legal. Trata-se apenas da modificação do wallpaper do gerenciador do login, do splash screen do kde, e do desktop, dando um efeito interessante.
Wallpaper
Primeiramente, escolha um wallpaper para sua resolução. Particularmente, gosto de escolher do site http://www.wallbase.cc, pode ser que você encontre alguns interessante por lá também.
Conky para o Gentoo
Como personalização é um assunto muito visado no meio open source, e em se tratando do Gentoo se vê pouco disso disponível na web, vou disponibilizar uma configuração para o conky muito atrativa, que inclui ícones.
HackDay LibreOffice
Olá pessoal. No próximo dia 30, acontecerá no sétimo SoLiSC o LibreOffice HackDay, primeiro HackDay do LibreOffice no Brasil.
Um HD é um evento voltado principalmente para a reunião dos colaboradores para o projeto em questão - neste caso o LibreOffice - para uma força-tarefa massiva e conjunta que envolve muito envio de código, revisões, correções, e também para a integração dos participantes. Veja esta imagem, que como disse Olivier Hallot, "diz muito sobre um HD".