J'essaie d'implémenter l'algorithme de Huffman pour la compression, ce qui nécessite d'écrire des bits de longueur variable dans un fichier. Est-il possible en C++ d'écrire des données de longueur variable avec une granularité de 1 bit dans un fichier?Encodage de huffman
Répondre
Non, la plus petite quantité de données que vous pouvez écrire dans un fichier est un octet.
Vous pouvez utiliser un bitset pour faciliter la manipulation de bits, puis utiliser un ofstream pour écrire dans un fichier. Si vous ne voulez pas utiliser de bitset, vous pouvez utiliser le bitwise operators pour manipuler vos données avant de les sauvegarder.
Le plus petit nombre de bits accessibles et sauvegardés est 8 = 1 octet. Vous pouvez accéder aux bits en octets à l'aide des opérateurs de bits^& |.
Vous pouvez mettre le bit à 1 en utilisant n'th:
my_byte = my_byte | (1 << n);
où n est 0 à 7.
Vous pouvez mettre le bit à 0 en utilisant n'th:
my_byte = my_byte & ((~1) << n);
Vous pouvez activer ou désactiver bit n'th en utilisant:
my_byte = my_byte^(1 << n);
Plus de détails here.
La réponse de klew est probablement celle que vous voulez, mais juste pour ajouter quelque chose à ce que Bill a dit, les bibliothèques Boost ont un dynamic_bitset que j'ai trouvé utile dans une situation similaire.
Non. Vous devrez empaqueter des octets. En conséquence, vous aurez besoin d'un en-tête dans votre fichier qui spécifie combien d'éléments sont dans votre fichier, car vous aurez probablement des bits de fin inutilisés.
Toutes les informations dont vous avez besoin sur le bit bidouilles est ici:
How do you set, clear, and toggle a single bit?
Mais l'objet le plus petit que vous pouvez mettre dans un fichier est un octet.
Je voudrais utiliser dynamic_bitset et chaque fois que la taille est supérieure à 8, extraire les 8 bits inférieurs dans un char et écrire cela dans un fichier, puis décaler les bits restants vers le bas de 8 places (répéter).
- 1. C++ Huffman code-tête
- 2. décodage d'un bloc JPEG Huffman (tableau)
- 3. Encodage Problème de conversion
- 4. Asp.net: encodage de chemin
- 5. libsox encodage
- 6. encodage url esperluette émet
- 7. Java, encodage par défaut
- 8. Encodage UTF en Java
- 9. Oracle regex - encodage question
- 10. Encodage .Net 8 bits
- 11. Encodage des caractères spéciaux
- 12. XHTML et & (esperluette) encodage
- 13. Bizarre String.getByte (encodage)
- 14. encodage du AuthzSVNAccessFile
- 15. NSLog incorrect encodage
- 16. encodage Querystring Params
- 17. System.Security.Cryptography et "Bad Data" - encodage de caractères?
- 18. ColdFusion XLS "Export" et Encodage de caractères
- 19. MySQL - Insérer japonais de PHP - Encodage Troubles
- 20. Encodage Base64 pour les images
- 21. IronPython "LookupError: encodage inconnu: hex"
- 22. VS 2008 Encodage et MSBuild Exec Tâche
- 23. Unicode Encodage et décodage problèmes dans QRCode
- 24. Windows Service Encodage non-Unicode Problème
- 25. page encodage et Jquery-Ui (onglets) ajax
- 26. Encodage mp4 utilisé par Google Video?
- 27. Encodage dans Streamreader dans mon application Silverlight
- 28. ASP.NET MVC et jQuery - Problème ajax encodage
- 29. Deux encodage dans un document HTML
- 30. Encodage montant dans le paiement paypal
vous ne devez pas nécessairement compter le nombre d'éléments du fichier un caractère spécial peut correspondre à la facture –