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?