2010-08-05 13 views
0

Salut, je suis la lecture d'un fichier binaire en utilisant c comme indiqué ici link textc des problèmes de lecture de fichiers binaires

afin que toutes les informations lues à partir du fichier binaire est stocké dans « char buffer * ». j'ai le format standard où il est dit que l'une des lignes devrait être

format: unsigned char, size: 1 byte 

je fais ce qui suit:

printf("%x\n", buffer[N]); 

mais que dois-je faire lorsque le format dit:

format: unsigned short, size: 2 bytes 

si je le fais comme suit, ce serait correct:

printf("%d%d\n", buffer[N], buffer[N+1]); 

sinon pouvez-vous me montrer la bonne façon?

pouvez aussi vous me dire si les conditions suivantes sont correctement lors de l'impression:

char    %c 
    unsigned long  %ul 
    unsigned short %d 
    unsigned char  %x 
    double   %f 
    long    %ld 

toutes les données dans le fichier binaire est en format petit-boutiste! Merci beaucoup d'avance!

+2

Comment lisez-vous quelque chose en utilisant printf? –

+0

J'ai donné un lien sur la façon dont le fichier binaire est lu dans le tampon ... J'espère que je vous comprends correctement. – sdfg

+0

Votre lien montre comment quelqu'un d'autre l'a fait. À quoi ressemble votre * code *? –

Répondre

2

Essayez printf("%d", (short)(buffer[N] + buffer[N+1]<<8)). Maintenant, notez que je devais supposer que l'ordre des octets dans le tampon avait l'octet le moins significatif du deux octets short stocké à l'adresse inférieure.

Je pourrais probablement avoir écrit *(short *)(&buffer[N]), mais cela suppose que N a le bon alignement pour contenir un short sur votre plate-forme, et que le tampon et la plate-forme s'accordent sur l'ordre des octets.

Ceci est en fait juste la pointe d'un très gros iceberg d'un sujet. Il y a beaucoup de problèmes subtils qui guettent, et d'autres vraiment insaisissables lorsque vous vous promenez dans des valeurs à virgule flottante.

+0

merci! pouvez-vous dire si elles sont correctes: char -% c, non signé long -% ul, non signé court -% d, non signé char -% x, double -% f, long -% ld. – sdfg

+0

@sdfg, vous avez un mélange de bien et de mal là-bas. Commencez par la page man de printf (3), puis lisez la suite sur la sérialisation. Google est probablement votre ami. – RBerteig