我正在尝试解析手写数字的 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。提前致谢!