hex edit oldugunda boşluk sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
seci20

hex edit oldugunda boşluk sorunu

Mesaj gönderen seci20 »

ustalarım merhaba bir dosya içerinde hex kodlarını değiştirirken 14 karakter bosluk bırakıyor daha onceden burdan bır ustamın verdıgı hex degıstırmeyı kullanıyorum orda bahsettıgım dosyada sorun olmuyor boslukta olmuyor ama bu yaptıgım dosyada bosluk olusuyor.değiştircegım yerdekı offsetlerıde dogru gırdım degısım ıslemıde yapıyor ama değişim yaptıgı yerden sonrasını bozuyor... bknz soyle


bu hex değiştirdiğim kod

Kod: Tümünü seç

var fs: TFileStream;
    buf: array [0..14] of char; //15 karakter
    adr: int64;
    a:ansistring;
begin
a:='111111111111111';
  fs := TFileStream.Create('data/3', fmOpenReadWrite);
  adr := $24;
  strcopy(buf, PChar(a));
  fs.seek(adr, soBeginning);
  fs.Write(buf, sizeof(buf));
  fs.Free;
end;
bu kodu kullanıyorum.

ama böyle olan dosya

Resim

böyle oluyor

Resim

gördüğünüz gibi değiştirdiğim yerden sonrası bozluyor tam 14 karakter bozuluyor array değiştidiğimde bu karakter dusuyor ama 0 yaptıgımda hata alıyorum cozemedim bir turlu yardımcı olurmusunuz rıca edersem
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: hex edit oldugunda boşluk sorunu

Mesaj gönderen xxxjedixxx »

Merhaba,

Kodunuz Delphi7'de sorun çıkartmıyor fakat XE8'de dediğiniz gibi çift byte olarak yazıyor ve boşluklar ortaya çıkıyor. Merak ettim, araştırdım ama bir çözüm bulamadım. Sanırım bu Encoding sorunu gibi görünüyor. Blok olarak yazınca sorun oluyor fakat tek tek yazınca sorun olmuyor. Bu yüzden kodu byte byte yazacak şekilde değiştirdim. Aşağıdaki kodu test ettim, Delphi7 ve XE8'de çalışıyor.

Kod: Tümünü seç

var fs: TFileStream;
    buf: array [0..14] of char; //15 karakter
    adr: int64;
    a:string;
    i: integer;
begin
  a:='111111111111111';
  fs := TFileStream.Create('dosya.xyz', fmOpenReadWrite);
  adr := $24;
  strcopy(buf, Pchar(a));
  for i := 0 to High(buf) do
  begin
    fs.Position := adr + i;
    fs.Write(buf[i], 1);
  end;
  fs.Free;
end;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: hex edit oldugunda boşluk sorunu

Mesaj gönderen SimaWB »

Delphi 7 ile XE8 arasındaki fark Unicode'dan kaynaklıdır.
sizeof(buf) 'ı kontrol ederseniz farklı sonuç çıktığını görürsünüz.
Oluşturulan bufferı Char yerine AnsiChar ile tanımlarsanız sorun çıkmaz diye tahmin ediyorum.
There's no place like 127.0.0.1
seci20

Re: hex edit oldugunda boşluk sorunu

Mesaj gönderen seci20 »

eve gelıp daha yenı deneme sansım oldu çok teşekkür ederim ıkı ustamında dedıgı dogru :) emeklerinize sağlık
Cevapla