From 02c4591d445dfe2cb29891b2c0d6a56722808d05 Mon Sep 17 00:00:00 2001 From: augustin64 Date: Sat, 19 Mar 2022 16:54:16 +0100 Subject: [PATCH] Update src/preview_mnist.c --- src/preview_mnist.c | 50 ++++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/src/preview_mnist.c b/src/preview_mnist.c index b1d1df5..9ddbed6 100644 --- a/src/preview_mnist.c +++ b/src/preview_mnist.c @@ -4,6 +4,12 @@ #include +uint32_t swap_endian(uint32_t val) { + val = ((val << 8) & 0xFF00FF00) | ((val >> 8) & 0xFF00FF); + return (val << 16) | (val >> 16); +} + + void print_image(unsigned int width, unsigned int height, FILE* ptr, int start) { unsigned char buffer[width*height+start]; @@ -19,37 +25,53 @@ void print_image(unsigned int width, unsigned int height, FILE* ptr, int start) } printf("\n"); } - printf("\t\t---\n"); } - -void print_bytes(char* filename) { +void read_mnist_images(char* filename) { unsigned char buffer[4]; FILE *ptr; ptr = fopen(filename, "rb"); - fread(buffer, sizeof(buffer), 1, ptr); + uint32_t magic_number; + uint32_t number_of_images; + unsigned int height; + unsigned int width; - uint32_t magic_number = buffer[0]; - uint32_t number_of_images = (int)buffer[1]; - unsigned int height = buffer[2]; - unsigned int width = buffer[3]; + fread(&magic_number, sizeof(uint32_t), 1, ptr); + magic_number = swap_endian(magic_number); + if (magic_number != 2051){ + printf("Incorrect magic number !\n"); + exit(1); + } - printf("magic number: %" PRIu32 "\n", magic_number); - printf("number of images: %" PRIu32 "\n", number_of_images); - printf("%x x %x\n\n", width, height); - for (int i=0; i < number_of_images; i++) - print_image(width, height, ptr, (i*width*height)+4); + fread(&number_of_images, sizeof(uint32_t), 1, ptr); + number_of_images = swap_endian(number_of_images); + + fread(&height, sizeof(unsigned int), 1, ptr); + height = swap_endian(height); + + fread(&width, sizeof(unsigned int), 1, ptr); + width = swap_endian(width); + + //printf("magic number: %" PRIu32 "\n", magic_number); + //printf("number of images: %" PRIu32 "\n", number_of_images); + //printf("%u x %u\n\n", width, height); + + for (int i=0; i < number_of_images; i++) { + printf("--- Number %d ---\n", i); + print_image(width, height, ptr, (i*width*height)); + } } + int main(int argc, char *argv[]) { if (argc == 1) { printf("Utilisation: %s [FILE]\n", argv[0]); return 1; } - print_bytes(argv[1]); + read_mnist_images(argv[1]); return 0; }