Typenumwandlung short auf char[]
-
Ich will auf einem Arduino über den COM-Port ein Integer Binär ausgeben.
Dafür verwende ich Serial.write, welches so deklariert ist.
virtual size_t write(uint8_t) = 0; virtual size_t write(const uint8_t *buffer, size_t size); size_t write(const char *buffer, size_t size) { return write((const uint8_t *)buffer, size); }
Sowas funktioniert, da es ja eine Array of Char ist.
const int size = 4; char buf[size]; Serial.write(buf, 4);
Wie kann ich aber ein short mit Serial.write ausgeben ?
Folgendes habe ich probiert, gibt aber nur ein Syntax-Fehler.
int l; l = 12345; Serial.write((char) l, 2)
Serial.write(&l, 2)[/code]
Jemand eine Idee ?
Jetzt habe ich es so gelöst, ist aber in meinen Augen nicht so elegant.
Serial.write(l & 0xFF); // LSB Serial.write(l >> 8); // MSB
-
int l; l = 12345; Serial.write(reinterpret_cast<char*> (&l), sizeof(l));
-
int ist nicht short
-
Danke,
So klappt es.
unsigned short l; l = 12345; Serial.write(reinterpret_cast<char*> (&l), 2);
int ist nicht short
Ich habe mich verschrieben, da auf den Atmegas ein int auch nur 16Bit hat.
-
Ich habe festgestellt, mit reinterpret_cast<char>* kann man recht viel machen.
Es funktioniert nicht nur bei short, es funktioniert auch bei Ganzen struct-Blöcken.Ich habe noch eine kleine Ergänzung gemacht:
#define toPChar(pointer) reinterpret_cast<char*>(&pointer)
Somit sieht mein Quell-Code einiges übersichtlicher aus:
// Serial.write(reinterpret_cast<char*>(&adcBuf.Data0), l * 4); Serial.write(toPChar(adcBuf.Data0), l * 4);
Bevor ich reinterpret_cast kannte, hatte ich für die Daten-Blöcke einen Umweg über eine Union gemacht.
-
Schön, dass du zumindest bemerkt hast, dass
reinterpret_cast<>
einen aussagekräftig beschissen langen Namen hat.Mach jetzt nur noch nen banalen C-Cast draus.
-
Mach jetzt nur noch nen banalen C-Cast draus.
Und wie geht diese, ich habe so was schon probiert, so wie ich im ersten Post geschrieben habe ?
-
0123ancd schrieb:
aussagekräftig
Was immer gut ist. Außer für Frickler.
0123ancd schrieb:
Mach jetzt nur noch nen banalen C-Cast draus.
Nein, ds hier ist die "C++" Sektion.
-
Nein, ds hier ist die "C++" Sektion.
Aber interessieren würde es mich trotzdem.
-
Mathuas schrieb:
Nein, ds hier ist die "C++" Sektion.
Aber interessieren würde es mich trotzdem.
-
@TE:
reinterpret_cast<>
ist äquivalent zu einem C-Cast nur arschlang und in blau.
-
0123ancd schrieb:
@TE:
reinterpret_cast<>
ist äquivalent zu einem C-Cast nur arschlang und in blau.Falsch.
zB. ist ein C-Cast auch gleich ein const_cast.
-
-
Typisches Trollverhalten.
-
Hi schrieb:
Typisches Trollverhalten.
*trollolololol*
-
Macht nix, ich sag immer es muss Dummköpfe geben, damit es auch die G'scheiten geben kann. So als Ausgleich