INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
int in zwei word zerlegen...
21.03.2015, 18:52
Beitrag #1
int in zwei word zerlegen...
Hallo Leute,

ich würde gerne eine Variable int (32bit) dermaßen zerlegen,
dass ich sie in zwei Variablen word (16bit) speichern kann.

Diese werden dann über ein Modbusprotokoll gesendet und in der übergeordneten Steuerung wieder zusammen gesetzt.
Dort mache ich das momentan so:
word1 mit 65535 multiplizieren und zu word2 addieren.

Aber das muss doch irgendwie eleganter gehen?
Ich dachte da an Bitshift. <<16 oder so. Nur habe ich Probleme, den genauen Syntax heraus zu finden.

Wer kann mir da behilflich sein? Ganz herzlichen Dank schon im Voraus!


Grüße,

Tom
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2015, 19:34 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2015 21:52 von HaWe.)
Beitrag #2
RE: int in zwei word zerlegen...
hallo,
das geht iP wie bei der Zerlegung in Bytes:

int32_t in32val;
int16_t highword, lowword;

dein int32val ist in Bitform
76543210 76543210 76543210 76543210

wenn du die Zahl also mit der Maske
00000000 00000000 11111111 11111111
ANDest, erhältst du die letzten 2 Bytes

( 00000000 00000000 11111111 11111111 ist in byte-Schreibweise 0xffff ;
dadurch werden die oberen 2 Bytes mit Nullen überschrieben, die unteren 2 Bytes bleiben wie sie sind)

lowword = int32val & 0xffff ;

und wenn du deine 32-bit-Zahl 16x nach rechts schiebst ("shiftest"), hast du das highword, denn dabei rutschen die unteren 16 bits (2 Bytes) nach rechts raus in die Ewigen Jagdgründe... und nur die oberen 16 bits (2 Bytes) rutschen runter an deren Stelle):

highword = int32val >> 16;


HTH !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2015, 19:42
Beitrag #3
RE: int in zwei word zerlegen...
Hei HaWe,

vielen Dank für diese Lösung!
das Lowword bildet Arduino sogar ohne Maske habe ich gerade herausgefunden.
wenn man var32=var16; setzt.
Allerdings ist das mit der Maske wohl die sicherere Methode.
Gleich mal einlesen, was Masken noch so alles können.

Vielen Dank nochmals!


Grüße,

Tom
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2015, 19:50
Beitrag #4
RE: int in zwei word zerlegen...
ja, das stimmt, allerdings ist nach meinem Gefühl diese Art von Typecasting int32 => int16 vielleicht nicht so ganz sauber, obwohl sie sicher logisch und mathematisch auch korrekt ist.
Ich geh da auch lieber auf Nummer Sicher, auch wenn es wschl unbegründet ist.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Zwei ident Feuchtesensoren an Arduino Uno R4 Karli 5 352 24.07.2016 23:36
Letzter Beitrag: SkobyMobil
Bug Mit zwei Ultraschallsensoren die Drehbewegung eines Servos steuern Poet 5 558 21.02.2016 18:37
Letzter Beitrag: Carlo
  Webserver erzeugt zwei Durchläufe. favicon.ico?!? WOHER??? BERND87 6 1.572 04.02.2016 13:56
Letzter Beitrag: Pit
  Zahlenformat bei Kommunikation mit zwei Arduinos Matthias_Arduino 5 632 07.01.2016 22:40
Letzter Beitrag: Bitklopfer
Exclamation String Zerlegen in drei Variablen Wampo 4 847 28.12.2015 01:07
Letzter Beitrag: Wampo
  Mit dem Pin 8 und 9 vom Yun werden zwei LED wechselseitig blinken über http arduinofan 1 550 08.12.2015 15:03
Letzter Beitrag: arduinofan
  I2P mit zwei Microcontroller diode1990 2 553 26.10.2015 20:07
Letzter Beitrag: Bitklopfer
  Serielle Kommunikation zw. zwei Arduino UNOs Marduino_UNO 2 1.106 20.08.2015 07:13
Letzter Beitrag: Marduino_UNO
  Integer Zahl in einer, zehner, hunderter und tausender zerlegen Schrittmotor 6 2.008 14.08.2015 18:07
Letzter Beitrag: Schrittmotor
  Zwei Programme gleichzeitig Lindi01 9 2.027 27.07.2015 23:27
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste