convert to dec
-
Hallo zusammen
Ich habe ein kleines Problem:
Wie kann ich das:char caTest[10] caTest[0]=0x00; caTest[1]=0x00; caTest[2]=0x03; caTest[3]=0xB7;
in ein int conventieren?
int iTest iTest|=caTest[0]; iTest<<=8; iTest|=caTest[1]; iTest<<=8; iTest|=caTest[2]; iTest<<=8; iTest|=caTest[3];
Leider kommt nicht 3070 babei raus...
Kann mir jemand sagen wie es richtig / am einfachsten geht?
-
-
Danke funktioniert jetzt
iTest|=(caTest[0]<<24); iTest|=caTest[1]<<16; iTest|=caTest[2]<<8; iTest|=caTest[3]&0xff;
Gruss Binggi
-
Sicher?
Setzt mal beicaTest[2]
einen Wert >= 0x80 ein.Du solltest iTest vorher initialiseren oder auf das erste | verichten.
-
falsch gedacht...
Hast recht. Wie geht es denn richtig?
Der Fall dass caTest[2] < 0x80 wird trifft bei meinem Programm gar nie zu, aber wäre trotzdem froh und die richtige Lösung.Und ev noch eine Erklärung wieso es nicht funktioniert.
iTest ist initialisiert... war nur ein ausschnitt aus dem Code.
-
char hat i.A. ein Vorzeichen. Das wird für die Berechnung (<<) auf int erweitert.
-1 = 0xff (char) = 0xffffffff (int32_t)iTest|=((caTest[0] & 0xff)<<24); iTest|=((caTest[1] & 0xff)<<16); ...
Wenn du da keine Zeichen verarbeitest, nimm lieber
uint8_t
bzw.int8_t
statt char.
-
Ok Danke.
Man lernt immer noch dazu.DirkB schrieb:
Wenn du da keine Zeichen verarbeitest, nimm lieber
uint8_t
bzw.int8_t
statt char.Ich bekomme diese Daten über RS232 (Modbus-Protokoll) im RTU-Modus. Da geht nur char * zum die Daten auslesen. Aber danke für den Hinweis.
-
Wenn du weißt was du tust, darfst du dein uint8_t Array auch nach char* casten.
Du könntest auch die Adresse von iTest übergeben, aber da passt die Endianess nicht. (Das kann man dann mit
ntoh()
wieder richtigstellen)