Sormak istediğim soru, 2 gün önce sorduğum sorunun devamı sayılır aslında.
Aşağıdaki kodda label1'de örneğin 'CCDDABC2' gibi bir hex sayı olduğunu düşünelim.ofenX arkadaşımın 2 gün önce verdiği bu kod örneğini tek başına uyguladım. Sorun yok.
Kod: Tümünü seç
Procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i:integer;
DEGER:ARRAY [1..8] OF STRING[8];
begin
s:='ACBDEB43';
FOR I:=1 TO 8 DO
BEGIN DEGER[I]:=COPY('00000000',1,I-1)+S[I]+COPY('00000000',I,8-I);
SHOWMESSAGE (DEGER[I]);
END;
end;
örneğin 1.karakteri aldıktan sonra Label1'de 0CDDABC2 kalmasını nasıl sağlarım.(Aslında CCDDABC2-C0000000 işlemi gibi.string üzerinde böyle bir çıkarma işlemi mümkün müdür?)Sırasıyla diğer karakterleri tek tek aldıkça da bu string (CCDDABC2) önündeki sıfırlar artacak.Aslında yapmak istediğim;sonuçta edit2'de de; yapılan bir dizi işlemden sonra,label1'deki hex karakterlere karşılık 8 basamaktan oluşan ascii karakterlerin olması.Kusura bakmayın kodlarda,kendi yazdığım kısımlarda optimizasyonla pek ilgilenemedim.Şimdiden teşekkürler arkadaşlar.Kolay gelsin.
Kod: Tümünü seç
procedure TForm1.Edit1Change(Sender: TObject);
var
s,a,c,d,i,l,e:integer;
b,n,k,h,m:string;
begin
s:=0;
d:=0;
for a:=1 to length(edit1.Text) do
begin
s:=s+ord(edit1.text[a]);
s:=s-$57;
s:=s and $0F;
c:=$20-a*4;
s:=s shl c;
d:=d+s;
end;
b:=inttohex(d,8);
label1.Caption:=b;
c:=0;
h:='';
for i:=1 to 8 do
begin
c:=32-i*4;
k:='00000000';
n:=copy(k,1,i-1)+b[i]+copy(k,i,8-i);
e:=hextoint(b);
e:=e-hextoint(n);
l:=hextoint(n);
l:=l shr c;
l:=l and $1F;
l:=l-$20;
l:=l+$57;
m:=chr(l);
m:=h+m;
end;
edit2.Text:=m;
end;