Einzelnen Beitrag anzeigen

Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#1

Negative HEX-Werte übertragen

  Alt 12. Mär 2009, 09:43
Hallo zusammen,

irgendwie wollen die grauen Zellen nicht (mehr) so recht.

Via ApdCOMPort sollen Hex-Daten im Format Hi/Lo übertragen werden. Um dies zu realisieren, wird eine Zahl via HiWord/LoWord zerlegt und mittels Chr und ApdCOMPort.PutString abgeschickt.
Delphi-Quellcode:
var Zahl: SmallInt;
begin
  ApdCOMPort.PutString(Chr(HiWord(Zahl)) + Chr(LoWord(Zahl));
end;
Funktioniert auch wunderprächtig, so lange die Zahl > -1 ist. Um dies zu beheben, setzte ich bewusst einen Breichsüberlauf ein, das ganze sieht dann so aus:
Delphi-Quellcode:
var Zahl: SmallInt;
begin
  if (Zahl < 0) then
    Zahl:= Zahl + $FFFFFFFFFFFFFFFF + 1;
  ApdCOMPort.PutString(Chr(HiWord(Zahl)) + Chr(LoWord(Zahl));
end;
Das funktioniert nun auch mit negativen Zahlen, ABER:
Das geht nur gut, so lange die Zahl -256 nicht unterschreitet.
Daher dachte ich mir:
Delphi-Quellcode:
var Zahl: SmallInt;
begin
  if (Zahl < 0) then
    Zahl:= Zahl + $FFFFFFFFFFFFFFFF + 1 + (((Abs(Min)-1) div 256) * 256);
  ApdCOMPort.PutString(Chr(HiWord(Zahl)) + Chr(LoWord(Zahl));
end;
Aber weder ein '+' noch ein '-' hinter der 1 bringt das gewünschte Ergebnis.
Sowohl bei einem '+' als auch bei einem '-' kommt (z.B.) bei einer -300 eine -44 im Gerät an.

Wo ist der Denkfehler?

Dank vorab und Gruß, Carsten

Mist, falsches Unterforum. Kann man den Beitrag irgendwie verschieben?
  Mit Zitat antworten Zitat