Binär in Dezimal umwandeln mit Serial.println();

Hallo alle,

ich hab grad ein kleines aber sehr frustrierendes Problem....

und zwar habe ich eine 5 bit Binärzahl also z.B. Bin = 10011;

Diese möchte ich gerne als Dezimalzahl ausgeben lassen und zwar mit Serial.println();

Warum funktioniert das nicht wenn Serial.println(Bin,DEC); eingebe???

Da kommt dann immer die gleiche zahl wie Bin raus also in diesem Bsp. 10011.

Andersherum funktioniert es doch auch wenn ich Dec = 3; habe und ich dann

Serial.println(Dec,BIN); eingebe kommt da ja auch 101 raus....

Ich hoffe sehr das mir da jemand weiterhelfen kann.

Is ja evt nur ein Syntax fehler -.-

LG Wilgelmy

10011 ist Dezimal. Ganz einfach. Wie soll der Compiler merken dass das Binär sein soll? B10011 oder 0b10011 ist Binär

Sehr cool danke <3

Zeig mal bitte deinen ganzen Code.

10011 in Worten: zehntausend und elf.

Grüße Uwe

danja95:
Zeig mal bitte deinen ganzen Code.

Wieso? Der Fehler ist offensichtlich. Man muss dem Compiler (genauer dem Parser) mitteilen wie Literale zu interpretieren sind. Er kann das nicht aus dem Kontext erraten.

Interessante Sache dazu: es gab im C++ Standard sehr lange keine Binär-Literale. Die gibt es erst neuerdings mit C++14. Was vorher ging stammt entweder aus GCC (0b) oder der Arduino Software (B)

Was vorher ging stammt entweder aus GCC (0b) oder der Arduino Software (B)

Alle C / C++ Compiler die ich kenne, konnten schon immer die 0b -Schreibweise.
Das Arduino B definiert einfach 256 Namen für alle Bitmuster eines Bytes. (igitt)
Ich teste nicht, ob B0001 , B01, B00000001 und alle anderen Schreibweisen für eine 1 definiert sind.

michael_x:
Alle C / C++ Compiler die ich kenne, konnten schon immer die 0b -Schreibweise.

Es ist nicht teil des C++ Standards. Compiler können das durchaus hinzufügen aber das ist nicht immer der Fall. Microsoft Visual C++ z.B. kann es erst seit VS2015:
https://msdn.microsoft.com/en-us/library/hh567368.aspx
Auch sonst siehst du dass der Compiler auch die Standard Sachen nicht vollständig umsetzt, bzw. das nur Schritt für Schritt tut

Wilgelmy:
und zwar habe ich eine 5 bit Binärzahl also z.B. Bin = 10011;
Andersherum funktioniert es doch auch wenn ich Dec = 3; habe und ich dann Serial.println(Dec,BIN); eingebe kommt da ja auch 101 raus.

Du solltest verstehen, daß der Wert einer Variablen sehr unterschiedlich dargestellt werden kann, als BIN, DEC, HEX usw. Der Wert hängt auch nicht vom Namen der Variablen ab, egal ob die Bin oder Dec heißt. Deshalb wird mit
Bin = 10011;
Bin auf 10011 gesetzt, nicht auf 19, und mit
Dec = 3;
Dec auf 3, was binär nicht "101" gibt sondern "11".

Eine Umwandlung von Werten ist weder möglich noch notwendig, für eine unterschiedliche Darstellung reicht z.B.

 Serial.println(Bin,BIN);
 Serial.println(Bin,DEC);

usw.

Hi

Wurde schon geklärt, woher die ‘Binär-Zahlen’ stammen?
Kann mir nur schwer vorstellen, daß ein Binärwert erst in einen String/char-Array umgewandelt wird, um Das dann zu übertragen.

(und wenn doch, könnte man diese Zeichenkette abgehen und die 2er Potenzen zusammen addieren)

MfG