Hex string'i tekrar Ascii karaktere çevirmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

Hex string'i tekrar Ascii karaktere çevirmek

Mesaj gönderen sailor »

Merhaba arkadaşlar,
Aşağıdaki kodla edit1'e yazdığım stringi belirli işlemlerden sonra edit2'de hex olarak gösteriyorum.Yapmak istediğim edit2'deki bu stringe aşağıdaki kodda uyguladığım işlemlerin tersini başka bir prosedür yazarak o prosedürde yaptırmak ve daha sonra ise o prosedürü Edit1.change olayında çağırıp kullanarak başka bir editte sonucu ASCII karakter olarak göstermek(Yani hex veya integer olarak değil).Aşağıdaki kodda işlemlerden sonra edit2'de CD89NNHK gibi bir hex string olduğunu farzedelim.Bu stringten C'den başlamak şartıyla sırayla karakterleri alıp aşağıdaki koddaki işlemleri ters sırada yaptırmam gerekiyor.Bu işlemlerin sonucunda 8 karakterlik hex olmayan bir string oluşması gerekiyor.Yalnız karakterleri tek tek alırken örneğin D harfi 2.sırada fakat ben bunu önünde ve arkasında 0'lar olarak almam gerek.Yani 0D000000 olarak.Dünden bu yana uğraşıyorum fakat her defasında yazdığım kodlar işe yaramıyor.Yardımcı olursanız çok sevineceğim arkadaşlar.Şimdiden teşekkürler.

Kod: Tümünü seç

procedure TForm1.Edit1Change(Sender: TObject);
 var
 b:string;
s,a,c,d:integer;
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);
  edit2.Text:=b;
    end;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ne demek istediğin tam anlaşılmadı. HEX ile ASCII ne alaka :?: ASCII derken hex (onaltılık) dan onluk tabana çevirme mi :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

Mesaj gönderen sailor »

İlgilendiğiniz için sağolun rşimşek hocam.Edit2'den okunan karakterler hex olacak fakat dediğim gibi önünde ve arkasında 0'lar olacak.Yani örneğin edit2'de CCFBDD12 hex karakterlerinin olduğunu düşünün.Burada F karakteri alınırken 00F00000 şeklinde alınacak.Yazmak istediğim prosedürün sonucunda A,B,C....Z,a,..z 1,2.. $,% gibi karakterlerin olmasını istiyorum.Kolay gelsin.
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

Mesaj gönderen sailor »

Lütfen arkadaşlar bu konu hakkında en ufak bir bilgisi olan varsa, yazabilirse inanın çok sevineceğim.Lütfen yardım edin.Kolay gelsin.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

hex dediğinizde sadece 1..9,a,b,c,d,e,f olur. soruda bir hatanız var. :?
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

Mesaj gönderen sailor »

Çok özür dilerim arkadaşlar ilk yazdığım mesajda hex stringi hatalı yazmışım.Hex stringin örneğin DDACB12F olduğunu düşünürsek,prosedürü nasıl yazabiliriz?
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Copy fonksiyonunu kullanmayı hiç düşündünüzmü ?
Aşağıdaki kod size umarım bir fikir verir.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);

var
s:string;
i:integer;
DEGER:ARRAY [1..8] OF STRING[8];
begin

       s:='ACBDEJ43';
       FOR I:=1 TO 8 DO
         BEGIN
            DEGER[I]:=COPY('000000000000',1,I-1)+S[I]+COPY('000000000000',I,8-I);
              SHOWMESSAGE (DEGER[I]);

             END;

end;



Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kod: Tümünü seç

procedure TForm1.btn_IntToHexClick(Sender: TObject);
var
  IntStr: String;
begin
  IntStr := InputBox('IntToHex', 'Onluk basamağa göre sayı girin', '1234');
  if IntStr <> '' then
    ShowMessage('Hex karşılığı = $' + IntToHex(StrToInt(IntStr),4));
end;

procedure TForm1.btn_HexToIntClick(Sender: TObject);
var
  IntStr: String;
begin
  IntStr := InputBox('HexToInt', 'Onaltılık (Hex) sayıyı girin', '$04D2');
  if IntStr <> '' then
  begin
    if IntStr[1] <> '$' then
      IntStr := '$' + IntStr;
    ShowMessage('Onluk tabana göre karşılığı = ' + IntToStr(StrToInt(IntStr)));
  end;
end;

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

Mesaj gönderen sailor »

Hepinizden Allah razı olsun.Verdiğiniz bilgiler inanın çok işime yarayacak.Hepinize tekrar tekrar teşekkür ederim.
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

Mesaj gönderen sailor »

Çok sağol ofenX kardeşim.Beni gerçekten çok iyi anlamışsın.Sorumun tam cevabını aldım.Tekrar görüşmek dileğiyle hoşçakal.Kolay gelsin.
Cevapla