2017-10-20 3 views
-1

So verwende ich C und ich habe 6 Arten von Befehlsnummern wie 0-5, wollen 3 von ihnen in Kombination zu nehmen, und speichern Sie die Kombination in Einzelbyte. Das Problem ist also, wie kann ich diese Zahlen kodieren? Wenn ich zum Beispiel binäre Codierung verwende, also 5 ist 101, dann kann ich nicht 555 speichern, da 101101101 9 Bits hat und ein Byte nur 8 hat. Vielen Dank für Ihre Aufmerksamkeit.Komprimieren 3 Anzahl Daten in einem Byte

+1

Sie können das nicht tun. Die Anzahl der möglichen Kombinationen (343) übersteigt 256. –

+0

Sie benötigen immer mindestens drei Bits, um 6 Symbole darzustellen, sodass Sie nicht drei verschiedene Symbole in einem einzigen Byte darstellen können. – user0042

+0

Sorry 0-5, 6 Art des Symbols – zpwpal

Antwort

8

Behandle die drei Zahlen als eine dreistellige Zahl Basis-6, und seinen Wert berechnen:

value = num1 * 36 + num2 * 6 + num3 

num1 = value/36 
num2 = (value/6) % 6 
num3 = value % 6 

Der Wert im Bereich von 0 bis 215 sein wird, so paßt es in einem Byte.

+0

Perfekte Antwort, danke – zpwpal

+0

Ein tangentialer Kommentar. Wenn Sie dies viel tun müssen (vielleicht für eine Farbtabelle) und Sie finden, dass/und% langsam sind: Sie könnten eine LUT zum Decodieren verwenden; oder mit etwas Vorsicht können Sie vielleicht die Division durch Multiplizieren und Schiefschalten approximieren (es muss nur genau genug sein, um für diese 216 Werte zu arbeiten). – NickJH

Verwandte Themen