Abend, ich bräuchte für ein Projekt ein kleines Stück Code, dass mir eine Dezimalzahl von 0-200 in einen Ternärcode umwandelt, und zwar in C, genauer in dem Dialekt der Arduino IDE, aber da geht ja das meiste, was auch in C geht, hoff ich. Ich habe mir jetzt schon stundenlang den Kopf zerbrochen, aber ich weiß nicht, wie, kann mir jemand weiterhelfen? Und eine LUT mit 200 Einträgen wollte ich jetzt auch nicht von Hand tippen :/
Gast
#3232618
Jeromyo Hochgesang schrieb: > Dialekt der Arduino IDE Das ist einfach C++, welches auch alles kann was C kann. Stelle die Zahl eben zur Basis '3' dar (anstelle zur Basis '2', wie sie Computer speichern, oder '10' wie man Zahlen üblicherweise menschenlesbar darstellt). Das geht üblicherweise über sukzessives Teilen mit Rest durch 3. Schaue mal nach BCD-Encodern, die machen fast das selbe, aber zur Basis 10.
Schau mal hier: http://de.wikipedia.org/wiki/Stellenwertsystem#Konvertierungen
Sehr nett, danke, ist ein guter Anfang :)
In itoa/utoa kann man doch die Bases (radix) angeben. Damit ist die Umwandling ins 3er-System eine C-Zeile.
Kannst du mal kurz ein Pseudocode-Beispiel mit itoa geben? Weil ich habs damit trotz Recherche nicht hinbekommen
Gast
#3232671
Darf man fragen wozu das benötigt wird?
Jeromyo Hochgesang schrieb: > Kannst du mal kurz ein Pseudocode-Beispiel mit itoa geben? Weil ich habs > damit trotz Recherche nicht hinbekommen http://www.cplusplus.com/reference/cstdlib/itoa/
Ich bastel an einem Verschlüsselungsalgorithmus auf dem AVR, durch den Zahlenbasiswechseln und reduzieren von Bitanzahlen wird der ursrüngliche Text bei falschem Schlüssel nicht mehr rekonstruierbar, so weit der Gedanke, klappt auch ganz gut :)
Danke an be stucki!
Gast
#3232721
Jeromyo Hochgesang schrieb: > Kannst du mal kurz ein Pseudocode-Beispiel mit itoa geben? Weil ich habs > damit trotz Recherche nicht hinbekommen Brauchst du es auch noch vorcompiliert? Du kannst auch so lange 81, 27, 9 und 3 von deiner Zahl abziehen, bis jeweils etwas negatives raus kommt.
Nein, Mr. X, es läuft alles schon so wie geplant :) Tzdm danke, ich habe es mit dem sukzessiven Teilen hinbekommen.
Gast
#3232735
Jeromyo Hochgesang schrieb: > sukzessiven Teilen Und wie lange dauert das im Vergleich zur Subtraktion?
Mr. X schrieb: > Und wie lange dauert das im Vergleich zur Subtraktion? Hab ich vor einem halben Jahr mal versucht. Um eine Zahl nur durch Subtraktion in einen String umzuwandeln, benötigte mein Controller ca. 1.5 mal länger als mit Modulo und Division. Der benötigte Programmspeicher war etwa gleich. Getestet mit einem PIC18 und dem XC8 Compiler von Microchip. Sourcecode hab ich nicht mehr.
Falls Geschwindigkeit zählt, kann man / und % verwenden und den Code auf Geschwindigkeit optimieren. Der Compiler verwendet dann eine Multiplikation. Beispiel:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Ergebnis mit avr-gcc 4.7:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
Und hier noch die 8-Bit Version, nochma kürzer:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
Was ich nicht verstehe ist, was das mit Verschlüsselung zu tun haben soll. Scheint eher ne Obfuscation zu werden als ne handfeste, seriöse Verschlüsselung...
Gast
#3232891
(Sry, gerade als Gast, da fremder Rechner :/) So hab ich das ganze jetzt gelöst, nicht sehr effizient und für euch wahrsch."Spaghetticode", aber was solls, i made it!
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
Mir fällt gerade auf, das innere, die tatsächliche Division+Modulo, könnte man in eine Schleife packen, aber so ists übersichtlicher :)
Jeromyo Hochgesang schrieb: > aber so ists übersichtlicher :) ernsthaft?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.