stl - Questions c/c++ sur les opérations binaires (en passant, à la recherche de bonnes bibliothèques et méthodes)
天蓬老师
天蓬老师 2017-06-05 11:11:09
0
2
823

Je travaille actuellement sur un projet impliquant la compression de contenu, qui nécessite que les données soient traitées de manière binaire (comme la compression LZ77, le codage Huffman, etc.), qui implique de nombreuses fonctions et fonctionnalités.

Mais quand je l'ai fait moi-même, j'ai découvert que bien que C++ fournisse une opération binaire relativement complète, elle est principalement basée sur un certain type de données pour les opérations binaires (telles que char), et char est 8 bits par défaut, ce qui n'est pas le cas. adapté aux opérations entre personnages. C’est très pratique et nécessite beaucoup de jugement.

Peut-être que ce que j'ai exprimé n'est pas très clair, ou qu'il y a un problème avec ma compréhension du C++, mais j'espère trouver une méthode capable de gérer le binaire de manière fluide... Ou existe-t-il une bibliothèque plus facile à utiliser ?

Est-ce que quelqu'un a de l'expérience dans ce domaine et peut donner quelques conseils ? Je vous serais très reconnaissant si cela peut vous aider, je vous enverrai une enveloppe rouge en privé pour vous exprimer ma gratitude.

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(2)
巴扎黑

Si vous souhaitez une plage de représentation de caractères plus large, vous pouvez utiliser wchar_t.
Si vous voulez un type pouvant utiliser n'importe quel bit comme début d'octet pour les données en mémoire, c'est définitivement impossible à réaliser.

Mais vous pouvez

`nl=((arr[0]&c0)>>6);
nh=((arr[1] &0x0f) << 2);
n=nh|nl;`
Combinons les 2 bits forts de l'octet précédent et les 4 bits faibles de l'octet suivant en un nombre binaire à 6 chiffres

给我你的怀抱

Vous utilisez déjà le binaire, considérez-vous toujours les caractères ?
Le binaire ne devrait prendre en compte que les octets, n'est-ce pas ?
L'algorithme de compression ne prend souvent pas en compte les caractères, car le fichier d'entrée peut être ASCII, UTF-8, UTF-16 (LE/BE) ou GBK, etc. Mais en dernière analyse, le point commun des langues est qu'il existe certaines lois en matière de statistiques.
Par exemple, e apparaît fréquemment en anglais, ou des mots comme is apparaissent fréquemment, ou des affixes tels que se et tor apparaissent fréquemment.
Le principe fondamental de la compression est d'utiliser le moins de bits possible pour représenter les éléments qui apparaissent fréquemment et réduire la redondance. De manière générale, cela n'a rien à voir avec les caractères.

Vous devriez en savoir plus sur les algorithmes de compression. LZ77/LZ78/Huffman sont tous des algorithmes de compression généraux. Ils ne se limitent pas au texte et sont basés sur des bits.

De retour au C++, C++ exige que la taille de quelque chose puisse être connue au moment de la compilation (la mémoire allouée à la pile est déterminée par le compilateur), mais le texte d'entrée n'est connu qu'au moment de l'exécution, donc en théorie, il n'y a pas de bonne méthode. Les jeux de caractères et l’encodage de texte constituent un gouffre profond, et il n’est pas recommandé de s’y lancer.

Si vous souhaitez effectuer des opérations en unités de bits, encapsulez vous-même une bibliothèque, ou certaines bibliothèques telles que boost peuvent être utilisées. Après tout, le minimum dans le processeur est d'un octet, mais il ne peut en exploiter que tous les bits.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal