Donc, j'utilise C et j'ai 6 types de numéros de commande comme 0-5, je veux en prendre 3 ensemble, et enregistrer la combinaison en un seul octet. Donc, le problème est comment puis-je encoder ces chiffres? Par exemple si j'utilise le codage binaire donc 5 est 101, alors je ne peux pas enregistrer 555 comme 101101101 a 9 bits et un octet n'a que 8. Merci pour votre attention.Compression des données de nombres 3 dans un octet
Répondre
traiter les trois nombres en tant que base 6 numéro à trois chiffres, et calculer sa valeur:
value = num1 * 36 + num2 * 6 + num3
num1 = value/36
num2 = (value/6) % 6
num3 = value % 6
La valeur sera dans la plage de 0 à 215, de sorte qu'il correspond à un octet.
Réponse parfaite, merci – zpwpal
Un commentaire tangentiel. Si vous avez besoin de faire cela beaucoup (peut-être pour une table de couleurs) et vous trouvez que/et% sont lents: vous pouvez utiliser une table de conversion pour le décodage; ou avec un peu de soin, vous pouvez peut-être approximer la division en utilisant multiplier-et-déplacer (il suffit d'être assez précis pour travailler pour ces 216 valeurs). – NickJH
Vous ne pouvez pas faire cela. Le nombre de combos possibles (343) est supérieur à 256. –
Vous avez toujours besoin d'au moins trois bits pour représenter 6 symboles, donc vous ne pouvez pas représenter trois symboles distincts dans un seul octet. – user0042
Désolé 0-5, 6kind du symbole – zpwpal