2017-10-20 29 views
-1

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

+1

Vous ne pouvez pas faire cela. Le nombre de combos possibles (343) est supérieur à 256. –

+0

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

+0

Désolé 0-5, 6kind du symbole – zpwpal

Répondre

8

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.

+0

Réponse parfaite, merci – zpwpal

+0

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