Sto ceercando di capire la posizione del puntatore, ma il risultato stampato a video, mi sorprende:
codice:
#include <stdio.h>
#include <stdint.h>
//dichiarazione variabili e puntatori
FILE *fp;
fpos_t *posizione;
long t;
//funzione swap big endian --> little Endian per valori di 16 bit
uint32_t swap32(uint32_t f)
{
f = ((f>>24)&0xff) | ((f<<8)&0xff0000) | ((f>>8)&0xff00) | ((f<<24)&0xff000000 );
}
uint16_t swap16(uint16_t x)
{
x = (x>>8) | (x<<8);
}
//struct per file midi
struct intestazione
{
uint32_t header;
uint32_t lunghezza;
uint16_t formato;
uint16_t numerotracce;
uint16_t tempo;
};
struct intestazione ise;
main()
{
fp=fopen("formato.mid","rb");
fread(&ise,sizeof(ise),1,fp);
t=ftell(fp);
printf("posizione: %ld",t);
fclose(fp);
}
Perché mi stampa posizione 16?!
2 uint da 32 3 da 16 non dovrebbe stampare 14?!
Ho intuito che è un problema di dimensione. Cioè ho capito che stampa 16 perché è legato ad una dimensione minima che può leggere, ma non ho ben capito qual è la regola.
Qual è la spiegazione corretta?
Grazie.