Thema: Delphi C++ Übersetzung klemmt

Einzelnen Beitrag anzeigen

totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#1

C++ Übersetzung klemmt

  Alt 31. Mai 2010, 16:21
Hallo,
ich muss gerade ein paar C Zeilen übersetzten. Aber da hier Äpfel und Birnen addiert werden komme ich nicht weiter.

Code:

struct crypt_block
{
  uint8 keytable[256];
  uint8 state;
  uint8 counter;
  uint8 sum;
};


static void init_crypt(struct crypt_block *block, uint8 *key, int len)
{
  block->state = *key;
  block->counter=0;
  block->sum=0;
}

static void crypt(struct crypt_block *block, uint8 *data, int len, crypt_mode_t mode)
{
  int i;
  uint8 z;

  for (i = 0; i < len; i++) {
    block->counter++;
    block->sum += block->keytable[block->counter];  
    z = data[i];
    data[i] = z ^ block->keytable[(block->keytable[block->counter] + block->keytable[block->sum]) & 0xff] ^ block->state;
    if (!mode) z = data[i];
    block->state = block->state ^ z;
  }
}
Geschrieben habe ich es nun so:

Delphi-Quellcode:
Type
  TCrypt_Block = Record
    keytable: Array [0 .. 255] of byte;
    state: PArray; // to key
    counter: byte;
    sum: byte;
  End;

  PCrypt_Block = ^TCrypt_Block;

procedure init_crypt(block: PCrypt_Block; key: PArray; len: Integer);
begin
  .........
  block^.state := @key;
  block^.counter := 0;
  block^.sum := 0;
end;

procedure crypt(block: PCrypt_Block; Data: PArray; len: Word; mode: TCrypt_Mode);
Var
  i: Integer;
  z : byte;
begin
  for i := 0 to len - 1 do
    begin
      Inc(block^.counter);
      block^.sum := block^.sum + block^.keytable[block^.counter];
      z := Data^[i];
      Data^[i] := z xor block^.keytable[(block^.keytable[block^.counter] + block^.keytable[block^.sum]) and $FF] xor block^.state; // hier klemmt es

      if mode = DECRYPT then
        z := Data^[i];
      block^.state := block^.state xor z; // und hier auch
    end;
end;
Aber beim block.state komme ich nicht weiter. Ist ja eigentlich ein Zeiger auf ein Array ?

Besten Dank
  Mit Zitat antworten Zitat