Hallo, bräuchte mal einen Tipp für den Arduino: int a=2; String y = String(a,BIN); Serial.println(y); // Ausgabe: 10 Was muss man einfügen, dass statt der Ausgabe: 10 entweder 00000010 oder 0000000000000010 erscheint. Vielen Dank !
Die Funktion utoa() sollte Dir hier helfen können. Hier gibt's schönen Beispielcode, der die führenden Nullen hinzufügen kann: https://forum.arduino.cc/t/ausgabe-mittels-sprintf-im-binarformat-nicht-moglich/256590/2
Hallo, ich hatte mir auch einmal sowas gebastelt. Mit optionalen Trennzeichen zur besseren Lesbarkeit. Länge der Zeichen ist abhängig vom Datentyp. Den Ordner myToolbox einfach ins libraries Verzeichnis kopieren. Ggf. IDE neu starten wenn unter Beispiele nichts auftaucht.
Danke allen. lm int a=15; String y = String(a,BIN); int l = String(a,BIN).length(); for(l; l<16; l++){ y = "0" + y;} Serial.println(a); Serial.println(y);
Hallo, das mit der String Klasse gewöhnste dir auf dem kleinen AVR am Besten gleich wieder ab. Nimm char Arrays. Sonst kommst du früher oder später in Probleme.
Veit D. schrieb: > .... Etwas zu pauschal. Naja, kann man schon mit arbeiten. Auf den Kleinen hilft dabei global anlegen und die Größe mit String::reserve() vorbesetzen.
Hallo, kann man machen nur dann muss man ggf. irgendwann wieder umdenken. Programmiert man gleich alles was solche Dinge betrifft mit char Arrays erspart man sich Probleme und Code umschreiben. Obliegt jedem selbst. Wollte auch nur gewarnt haben.
Unabhängig von Arduino und maximal portierbar:
1 | #include <stdio.h> |
2 | #include <stdint.h> |
3 | #include <stdbool.h> |
4 | |
5 | int main() |
6 | {
|
7 | uint8_t zahl=2; |
8 | // uint16_t zahl=2;
|
9 | // uint32_t zahl=2147483647;
|
10 | |
11 | int bits = sizeof(zahl)*8; |
12 | for (int i=0; i<bits; i++) |
13 | {
|
14 | bool msb = zahl & (1<<bits-1); |
15 | putchar('0'+msb); |
16 | zahl = zahl<<1; |
17 | }
|
18 | |
19 | putchar('\n'); |
20 | }
|
Alternativ, aber zumindest auf AVR vermutlich langsamer ist:
1 | for (int i=bits-1; i>=0; i--) |
2 | {
|
3 | bool bit = zahl & (1<<i); |
4 | putchar('0'+bit); |
5 | }
|
Der Unterschied ist, dass der untere Code eine Shift-Operation mit variabler Anzahl von Schritten enthält. Da AVR keinen Barrel-Shifter haben, muss der C-Compiler dies durch eine innere Wiederholschleife umsetzen.
Hallo, vielleicht eine dumme Frage, aber das läuft vermutlich nur auf dem PC, oder? Wie kommt die Ausgabe auf die Serielle? Unabhängig bedeutet doch läuft überall?
Veit D. schrieb: > aber das läuft vermutlich nur auf dem PC, oder? In der Tat habe ich das Programm nur auf einem Laptop getestet. Für serielle/usb Ausgaben musst du bei Arduino die Methoden der Serial Klasse benutzen, anstatt putchar(). Für serielle Ausgabe auf AVR Mikrocontroller ohne Arduino Framework habe ich ein Beispiel: http://stefanfrings.de/avr_hello_world/index.html > Unabhängig bedeutet doch läuft überall? Das "unabhängig" bezog sich auf den Algorithmus.
Stefan ⛄ F. schrieb: > Veit D. schrieb: >> Unabhängig bedeutet doch läuft überall? > > Das "unabhängig" bezog sich auf den Algorithmus. Das ist der Punkt den ich wissen wollte und warum ich irritiert war. Alles klar, alles gut. Danke.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.