cblc/exercicios/03/pbytesdaniel.c

49 lines
1.6 KiB
C

// versão do colega Daniel, publicada no Issues
//
#include <stdio.h>
void print_bytes(char *label, void *addr, size_t size);
int main(void) {
int num = 100000;
int sqr_int = num * num;
unsigned long sqr_long = (unsigned long)num * num;
//--------------
print_bytes("---------------> num", &num, sizeof(num));
printf("Resultado -> %d\n", num);
print_bytes("-----------> sqr_int", &sqr_int, sizeof(sqr_int));
printf("Resultado -> %d\n", sqr_int);
print_bytes("----------> sqr_long", &sqr_long, sizeof(sqr_long));
printf("Resultado -> %lu\n", sqr_long);
//--------------
return 0;
}
void print_bytes(char *label, void *addr, size_t size) {
unsigned char *bytes = (unsigned char *)addr;
//printf("%p - %s - ", bytes, label);
//printf("%p - %s\n", bytes, label);
printf("%s - %p\n", label, bytes);
// Se a avaliação da expressão 'i > (size -1)' retornar 0 (falso),
// ela receberá o valor que vem depois dos ':' que é o valor
// apontado por bytes[i].
//
// Se a avaliação da expressão 'i > (size -1)' retornar 1 (verdadeiro).
// ela receberá o valor que vem depois da '?'
// == 0 falso
// != 0 verdadeiro
for (size_t i = 0; i < 8; i++) {
int res = i > (size - 1);
printf("| Endereço do byte[i]: %p | Retorno de [i]: %d ", &bytes[i], res);
printf("| Valor no byte: %02x |\n", i > (size - 1) ? 0 : bytes[i]);
//printf("|>Retorno de [i]: %d : Endereço do Byte[i]: %p<| \n", res, &bytes[i]);
}
}