2009-06-17 5 views
0

je dessous code. J'essaie de ne vider que 18 LSBits de la variable a. Mais la valeur déversée dans le fichier est 3bcdf.bits de dumping/octets dans un fichier en mode binaire

Ma question - est-il pas possible de vider/fwrite/fprintf nombre souhaité de bits qui ne soit pas un multiple de 4 (grignotage) dans un fichier?

Merci

EDIT:

1.) Lorsque j'ai vérifié la sortie de mon fichier de vidage j'ai réalisé, depuis que je suis l'ouverture du fichier en mode binrary, je ne devrait pas utiliser fprintf, mais je utilisez fwrite. 2.) Ce que je vois dans la sortie est DF BC 03, il écrit en multiples de 8 bits, donc il écrit 24 bits (3 octets) mais j'étais intéressé par seulement 18 bits. Mais je me suis rendu compte que la bibliothèque d'écriture de fichier ne sera pas capable d'écrire un non-multiple de 8 bits dans un fichier. il ajoutera toujours les bits de début zéro pour compléter l'octet, puis le vider. "L'unité du compte le moins" pour une donnée de fichier est un octet.

-AD.

+0

Je crains que vous ne pouvez pas écrire une partie d'un octet dans un fichier. Vous devez écrire des octets complets. Si vous voulez qu'un autre processus ne lise que 18 bits, vous devez le faire lire 18 bits spécifiquement, ou écrire le nombre de bits dans le fichier (par exemple dans les 4 premiers octets). –

Répondre

0

0x3bcdf sont les 18 LSBits de 0xffafbcdf, il semble donc fonctionner comme prévu. Qu'est-ce que vous attendiez?

0

Les fichiers sont écrits en octets (8 bits), non quartets (4 bits).

Modifier après votre édition: fprintf imprimera texte, donc vous aurez 6 octets, où comme si vous avez utilisé fwrite vous écrirez un int (32 bits) dans un fichier, mais masquer la valeur enregistrée.

1

Comme d'autres l'ont dit, le caractère est l'entité de taille minimale, vous pouvez écrire dans un fichier. Je voudrais juste observer qu'il n'y a rien de mal à utiliser fprintf() (ou toute autre fonction de sortie de flux) sur les fichiers binaires.

+0

@Neil: Si je l'ai utilisé un fprintf() pour écrire à déposer alors il déversait les valeurs ascii pour les octets 3 BCDF, fichier contient 32 par exemple 62 63 64 66. Lorsque, fwrite eu dumping df bc 03. – goldenmean

+0

Oui, ils différentes choses, mais elles sont toutes deux des fonctions tout aussi valables à utiliser avec des fichiers binaires. –

Questions connexes