Ich habe eine Fremdanwendung, auf die ich zugreifen muß.
Es ist eine Datenbank (BTrieve), die ich auch bearbeiten kann.
Soweit so gut. Aber der Kollege von einst hat ein Datenbankfeld definiert
Character, 4 Byte lang
in das er aber eine 4-Byte-Integerzahl BINÄR "hart" überschreibt.
Dort steht dann 00 00 00 00 für Null, oder 30 75 00 00 für 30000
WENN ich nun
Delphi-Quellcode:
var x : array[1..4] of byte;
i, j : Integer;
i:= adstableAnzahl.Value div 16777216; x[4]:=ord(i);
j:= adstableAnzahl.Value mod 16777216;
i:=j div 65536; x[3]:=ord(i);
i:=j mod 65536;
j:=i div 256; x[2]:=ord(j);
j:=i mod 256; x[1]:=ord(j);
table1Anzahl.Value:=char(x[1])+char(x[2])+char(x[3])+char(x[4]);
programmiere, dann wird die Zahl 30000 in X[1]=30h; X[2]=75h; X[3]=00h und X[4]=00h umgewandelt,
aber, weil das Datenbankfeld ein 4-Byte Charakterfeld ist, werden nur das erste und zweite Byte übertragen, die 0-Byte werden (als Stringende) nicht mit "angesehen" und im Tabellenfeld steht dann:
03 75 20 20, also mit BLANK aufgefüllt.
--------------------------------------
Wie kann ich auf die einzelnen BYTES des 4-Byte Stringfeldes zugreifen? (Zeiger vielleicht)
Denn
Delphi-Quellcode:
table1Anzahl.Value[1]:=char(x[1]); table1Anzahl.Value[2]:=char(x[2]);
table1Anzahl.Value[1]:=char(x[3]); table1Anzahl.Value[2]:=char(x[4]);
geht natürlich nicht.
Ich habe auch schon
for i:= 1 to 4 do X[i] := x[i] xor 255;
table1Anzahl.Value:=char(x[1])+char(x[2])+char(x[3])+char(x[4]); gemacht.
Damit schreibt er natürlich 00h als FFh und alle 4 Byte werden gefüllt.
ABER
table1Anzahl.Value[4] := table1Anzahl.Value[4] xor #255; geht auch nicht.
Mit IF kann man ein Byte ABFRAGEN (if table1Anzahl.Value[4] = #0 then ....)
aber nicht schreiben.
Kann mir jemand einen Tip geben, wie ich die Byte im String,
in der Tabelle, beschreiben kann?