Да, * буфер будет считываться в отладчике Xcode как 0x72, потому что буфер является указателем на символ.
Если первые четыре байта в блоке памяти, на который указывает буфер, являются (шестнадцатеричными) 72 00 0000, тогда возвращаемое значение должно быть 0x00000072, а не 0x00000027.Байты должны быть поменяны местами, но не два «куска», составляющих каждый байт.
Этот код пропускает память, которую вы используете malloc, и вам все равно здесь не нужно malloc.
Ваша замена байтов правильна на PowerPC или 68K Mac, но не на Intel Mac или ARM на базе iOS.На этих платформах вам не нужно менять местами байты, потому что они изначально имеют младший порядок байтов.
Core Foundation предоставляет способ сделать все это намного проще:
static uint32_t file_read_int32_le(char* buffer, FILE* file) {
fread(buffer, 1, 4, file); // Get four bytes from the file
uint32_t val = *(uint32_t*)buffer; // Turn them into a 32-bit integer
// Swap on a big-endian Mac, do nothing on a little-endian Mac or iOS
return CFSwapInt32LittleToHost(val);
}