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: