cblc/exercicios/03/5dump.c

39 lines
1.5 KiB
C

#include <stdio.h>
void print_bytes(char *label, void *addr, size_t size);
// declaração do protótipo
int main(void) {
int num = 100000;
// declaração da variável num como valor inteiro
int sqr_int = num * num;
// inicializa o inteiro sqr_int como num multiplicado por num
unsigned long sqr_long = (unsigned long)num * num;
// atribui sqr long como tipo long, garantindo sua tipagem correta com o parentesis
print_bytes("num ", &num, sizeof(num));
printf("-> %d\n", num);
//utiliza o protótipo para imprimir o endereço na memória e bytes á byte do dado
//utiliza o printf para imprimir o valor literal da variável
print_bytes("sqr_int ", &sqr_int, sizeof(sqr_int));
printf("-> %d\n", sqr_int);
print_bytes("sqr_long", &sqr_long, sizeof(sqr_long));
printf("-> %lu\n", sqr_long);
return 0;
}
void print_bytes(char *label, void *addr, size_t size) {
//cria o protótipo contador de bytes, utilizando um ponteiro para char, um ponteiro para endereço e o especificador size_t
unsigned char *bytes = (unsigned char *)addr;
//declara o ponteiro bytes como unsigned char e o inicializa em addr
printf("%p - %s - ", bytes, label);
// utiliza o printf para impŕimir o endereço dos bytes e o tipo enunciado
for (size_t i = 0; i < 8; i++)
printf("%02x ", i > (size - 1) ? 0 : bytes[i]);
}
//criar um loop que percorre byte a byte a variável declarada até o valor 8 de size_t, imprimi todos os indices do item byte
//