Stringi ascii koduna döndürme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cenkay
Üye
Mesajlar: 5
Kayıt: 04 Nis 2006 10:51

Stringi ascii koduna döndürme

Mesaj gönderen cenkay »

S.a arkadaşlar benim sorunum şöyle birşey.
Elimde bir String ifade var. Ben bunu direk integer değere döndürmek istiyorum. Bunun için cat yapıyorum. Fakat cast sonucunda aldığı değerlerin ne değeri olduğunu anlamadım. Mesela
str:='deneme';
x:=Integer(str);
x burda 4530848 değerini alıyor. Acaba bu ne değeridir. Çünkü ben aynı değeri java da çözmek isteyecem ve aynı değeri bulamadım. Toplu dönüşüm işlemlerinde yardımcı olursanız sevinirim.
Yani ben 94858492844935364140494036 gibi gelen ascii kodları nasıl stringe çeviririm. Bunu javada biginteger ile yapabiliyordum.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

cenkay yazdı:str:='deneme';
x:=Integer(str);
x burda 4530848 değerini alıyor. Acaba bu ne değeridir
bu s değişkeninin hafızadaki adres değeridir. s bilgisi içindeki 'deneme' değeri ile alakalı bir değer değildir. Bunun yerine şöyle bir döngü kurulabilir ama delphideki en büyük sayı tipi int64 tipidir (–2^63..2^63–1 arasında tam sayı değeri).

Kod: Tümünü seç

function StrKodu(const S:String):Int64;
var i:Integer;
begin
  Result:=0;
  for i:=Length(S) downto 1 do
   Result:=Ord(S[i])+(Result shl 8);{(Result shl 8)-> 8 bit sola kay yani Result*256 anlamına gelir ama daha hızlı çalışır}
end;

function KodunStrsi(Kod:Int64):String;
var i:Integer;
begin
  Result:='';
  while Kod>0 do begin
    Result:=Result+Chr(Kod and $FF);//$FF=255
    Kod:=(Kod shr 8);{(Kod shr 8)-> 8 bit sağa kay yani Kod/256 anlamına gelir ama daha hızlı çalışır}
  end;
end;
İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
cenkay
Üye
Mesajlar: 5
Kayıt: 04 Nis 2006 10:51

Mesaj gönderen cenkay »

sabanakman çok teşekkür ederim cevabın için
yalnız geri dönüşüm işleminde stringe çevirirken 4 karakterden fazlasını göstermiyor. Sebebide sayı çok fazla büyüyor. Acaba 8 bit kaydırma yerine 2 bit kullansam olurmu yada daha farklı bişey yapsam. Teşekkürler.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

String bilgide bulunan her bilgi 8 bitlik bir bilgidir. Bu yüzden 8 bit kaydırma yaptım. Bunu ne için yaptığını pek anlamadım ama bu durum için başka yöntem düşünmelisin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla