Sto ceercando di capire la posizione del puntatore, ma il risultato stampato a video, mi sorprende:
Perché mi stampa posizione 16?!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); }
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.