Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Bytearray umwandeln in Zahl mit Vorzeichen Kategorie: Programmierung (von André H. - 10.02.2006 21:23)
Als Antwort auf Re: Bytearray umwandeln in Zahl mit Vorzeichen von Matthias Koch - 9.02.2006 19:51
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Matthias,

> Guten Abend K_D_B und André,
> ich habe diese Routine mal im Simulator getestet, leider ohne Erfolg.
> Das shl 8 auf eine Bytevariable geht wohl deshalb noch, da intern immer 16 Bit zur Verfügung stehen.
> Shl 16 auf eine Byte-Variable funktioniert, wie gesagt, bei mir im Simulator nicht. Möglicherweise habt ihr das
> auf der CCII getestet???
> Jedoch grundsätzlich versagt diese Routine beim Umwandeln von 24 Bit 2er-komplemtärzahlen, da bei der
> equatation in long-typen das höchstwertige Byte immer mit 0x00 aufgefüllt wird was natürlich bei negativen
> Zahlen zu einem Fehler führt.
> Gebt mir mal einen Tip woran es bei mir im Simulator haken könnte.

Ja, da hab ich das gelegt Ei auch noch ausgebrütet. ;-)
Natürlich geht ein Schieben bei Integer und Byte mit 16 Bit nicht.
Dafür muÃ? der Wert vorher schonmal Long definiert sein.
Ich hab's ja selbst in den FAQ geschrieben.
Ich hatte einfach irgendwie die shl 16 und shl 24 übersehen. ;-)

Im anderen Posting in diesem Thread hatte ich es aber korrekt geschrieben:
long wert;
//Bit 7 bis 15=Vorzeichen, Bit 0 bis 6 Daten des High(est)-Byte:
wert=((daten[2] and 0x80)!=0 shl 7) or (daten[2] and 0x7F);
wert=(daten[1] shl 8) or daten[0] or (wert shl 16);


So funktioniert es immer, da in der ersten Zeile alles noch im 16Bit-Bereich ist und das
in eine Long Variable gespeichert wird.
In der zweiten Zeile wird die Long-Variable um 16 Bit geschoben, was wiederum ohne Probleme geht.

MfG André H.


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: