Array'e Byte Byte Karakter yerlestirmek yerine daha basit yol ?

Başlatan bunalmis, 29 Mayıs 2011, 02:06:12

z

Komut: array [0..2048] of byte;  gibi arrayimiz olsun.

Bu arayin icine asagidaki gibi veriler atmak istiyorum.

Komut[0]=$81;
Komut[1]=byte('B');
Komut[2]=byte('u');
Komut[3]=byte('l');
Komut[4]=$82);
Komut[5]=byte('A');
.....
.....

Ancak bu islemi boyle uzun uzun yapmak yerine asagidaki gibi basitce hazirlamak ve array icine atmak istiyorum.

Komut:=$81,'Bul',$82,'A'.......

Bunu nasil yaparim?

(Aslini sorarsaniz bu verileri const array icine atacagim.)




Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein


const DeviceIds:array[0..11] of Char =('S','T','T','T','T','L','E','I','I','V','V','G');

bu şekilde ilk değer ataması yapılabiliyor. Ama farklı veri türleri için çevirim fonksiyonları kullanarak bu şekilde değer ataması yapılabiliyor mu? Hiç denemedim.  Delphi kurulu olmadığı için deneyemiyorum.  Siz bir deneyip sonucu bildiriseniz ben de merakımı gidermiş olurum. 

Klein

biraz önce delphi kurup denedim hata vermedi.

const xxx:array[0..5] of byte =(byte('1'),$2,3,4,5,6);

ekleme:
labelde sonuçları görerek test ettim veriler doğru atılmış.

z

Hocam evet hata vermiyor fakat istedigim, daha kolay yazim sekli.

8086 Asm de

Komut  DB   81, 'ABC', 23 dedikmi

Komut+0=81
Komut+1=41
Komut+2=42
Komut+3=83
Komut+4=23

Seklinde veriler ard arda diziliveriyor.

Benzer durumu delphide de elde etmem lazim. Aksi halde Verileri byte byte virgullerle vs ayirmak iskence. Dahasi satira bakinca hata yakalamak imkansiz.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Tam olarak aradığınız şey değil ama şöyle bir şey belki işinizi kolaylaştırabilir.

var
  Form1: TForm1;
   x:array[0..25] of byte;
const
    s:string=('abc'+'123'+chr(15)+chr(81));
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  for  i:=0 to 9 do
  begin
      x := byte(s[i+1]);
  end;
end;

z

Kendimce super bir cozum buldum

Asagidaki gibi bir Tablo fonksiyonu olusturup asm nin DB kodundan yararlandim.

function Tablo():boolean;
begin
        asm
                db 65,'123'
        end;
end;

procedure TForm1.FormActivate(Sender: TObject);
var
i:integer;
p:Pchar;
c:char;
begin

        form1.caption:='';

        p:=ADDR(Tablo);

        for i:=0 to 3 do
           begin
              c:=P^;
              inc(p);
              form1.caption:=c;
              sleep(1000);
           end;
end;
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Yukarıdaki örneği  aşağıdaki gibi güncellersek  daha okunaklı oluyor. Hem de ASM kullanmaktan daha basit olur ve uyumluluk sorunları yaşatmaz.   

var
  Form1: TForm1;
   x:array[0..25] of byte;
const
    s:string=('abc'+'123'+#15+#65);