Я пытаюсь разобрать базу данных рукописных чисел MNIST. Однако, когда я смотрю на значения, которые он дает мне, когда я использую fread, они неверны. Я изменил порядок следования байтов, но числовые значения по-прежнему неверны. Ссылка на базу данных здесь: http://yann.lecun.com/exdb/mnist/
int ChangeEndianness(int value) {
int result = 0;
result |= (value & 0x000000FF) << 24;
result |= (value & 0x0000FF00) << 8;
result |= (value & 0x00FF0000) >> 8;
result |= (value & 0xFF000000) >> 24;
return result;
}
FILE *imageTestFiles = fopen("train-images-idx3-ubyte.gz","r");
if(imageTestFiles == NULL) {
perror("File Not Found");
}
int magic_number_bytes;
fread(&magic_number_bytes, sizeof(int), 1, imageTestFiles);
printf("%d\n", ChangeEndianness(magic_number_bytes));
Все, что это должно сделать, это напечатать «магическое число», которое равно 2049 или 0x00000801, но вместо этого оно напечатает 529205256, которое равно 0x1F8B0808. Я новичок в C, всегда использовал Java заранее. Заранее спасибо!
gz
указывает на то, что файл данных сжат, поэтому вам сначала нужно распаковать его, прежде чем вы сможете прочитать из него свои данные? - person Jongware   schedule 13.12.2015