Ich habe einen String, welcher eine Vorzeichenbehaftete int16 Zahl darstellt. Dieser String sollte aber eigentlich eine Vorzeichenlose Int16 Zahl sein.
D.h. im Bereich 0.. 2^15-1 sind beide Interpretationen Gleich, danach wird die eine Negativ interpretiert, die andere entsprechend nicht. Zur Umwandlung habe ich mir die beiden Routinen
Code: Alles auswählen
Function convertsigned1(data: String): String;
Var
i: word;
s: Smallint;
v: variant;
Begin
s := strtoint(data);
v := s;
i := v;
result := inttostr(i);
End;
Function convertsigned2(data: String): String;
Var
i: ^word;
s: Smallint;
Begin
s := strtoint(data);
i := @s;
result := inttostr(i^);
End;
geschrieben. Beide funktionieren, die Frage ist nun was wäre der "Sauberere" Programierstiel ? Als 3. Option gäbe es auch noch die Mathematische Variante
Code: Alles auswählen
Function convertsigned3(data: String): String;
Var
i: word;
s: Smallint;
Begin
s := strtoint(data);
If s >= 0 Then
i := s
Else
i := 65536 + s;
result := inttostr(i);
End;
Nur ist mir diese "zu rechenintensiv". So welche Variante würdet ihr nun Vorziehen ?
Gruß
Corpsman