Go Down

Topic: in byte zerlegen und wieder herstellen (Read 1 time) previous topic - next topic

Ratlos

Hallo,
warum ist der zürückgegebene Wert nicht richtig.
( Bei über 32000 )

Wenn das jemand mal erklären oder schreiben könnte
Danke
Code: [Select]
unsigned long OperationHours = 320000; // Rückwert falsch
//unsigned long OperationHours = 32000; // Rückwert richtig
    // Test für Speichern der Betriebsstunden
    byte STD1=0;
    byte STD2=0; 
    byte STD3=0;
    byte STD4=0;
void setup()
{
  Serial.begin(9600);        // Seriale Schnittstelle Datenrate
}
  void loop()
  {
     STD1 = (byte)( (OperationHours >> 24));
     STD2 = (byte)((OperationHours >> 16)); 
     STD3 = (byte)((OperationHours >> 8)) ;
     STD4 = (byte) OperationHours ;

  unsigned long int    STD =  ((STD1 & 0xFF )<< 24) +
                           ((STD2 & 0xFF )<< 16)  +
                            ((STD3 & 0xFF )<< 8) +
                            (STD4 & 0xFF ) ;
                           
    long value = (unsigned long)(STD1 << 24) | (STD2 << 16) | (STD3 << 8) | STD4;
         Serial.print("  Rueck value ")  ;      Serial.print(value)  ;
            Serial.print("            ")  ;             
   Serial.print(" Original  "); Serial.print(OperationHours);
      Serial.print(" Rueck STD "); Serial.print(STD);
     // Ende Test Betriebsstunden
      delay(5000); 
}


sth77

Du reagierst nicht auf die Antworten in deinem Thread und fragst einfach nochmal? Ganz schön frech...

http://arduino.cc/forum/index.php/topic,141836.msg1064934.html
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Ratlos

Hallo sth77,
das hatte ich alles schon ausprobiert.
Jetzt habe ich das unter ein besseren Subject gestellt.
Den bei dem Anderen war es nicht gut formuliert.

Werde mich mehr zurückhalten was zu fragen, möchte ja nicht frech sein.

Udo Klein

Es reicht nicht, daß die linke Seite groß genug ist um das Ergebnis aufzunehmen. Die rechte Seite muß auch schon mit unsigned long int rechnen.  D.h. ich würde an Deiner Stelle die Bytes vor dem Shift mit (unsigned long int) casten.
Check out my experiments http://blog.blinkenlight.net

Udo Klein

Nachtrag. Ich würde das überhaupt nicht in der Form implementieren. Stattdessen würde ich das ganze als union abfackeln. Also ziemlich genau so: http://www.willemer.de/informatik/cpp/union.htm. Nur eben mit 4 Bytes statt mit 2.
Check out my experiments http://blog.blinkenlight.net

Go Up