Java->Pascal

0

To jest kod Javy jak by on wyglądał w Palscalu??

public static String transformKey(String s)
{
    int ai[] = new int[16];
    int ai1[] = new int[16];
    if(s.length() < 16)
        return "(key to short)";
    int i = 0;
    do
    {
        char c = s.charAt(i);
        ai[i] = (byte)(c > '9' ? c > 'Z' ? (c - 97) + 36 : (c - 65) + 10 : c - 48);
    } while(++i < 16);
    i = 0;
    do
        ai[i] = f1[ai[i] + i];
    while(++i < 16);
    System.arraycopy(ai, 0, ai1, 0, 16);
    i = 0;
    do
        ai[i] = (ai[i] + ai1[p1[i]]) % 62;
    while(++i < 16);
    i = 0;
    do
        ai[i] = f2[ai[i] + i];
    while(++i < 16);
    System.arraycopy(ai, 0, ai1, 0, 16);
    i = 0;
    do
        ai[i] = (ai[i] + ai1[p2[i]]) % 62;
    while(++i < 16);
    i = 0;
    do
        ai[i] = f3[ai[i] + i];
    while(++i < 16);
    i = 0;
    do
    {
        int j = ai[i];
        ai[i] = j >= 10 ? j >= 36 ? (97 + j) - 36 : (65 + j) - 10 : 48 + j;
    } while(++i < 16);
    StringBuffer stringbuffer = new StringBuffer();
    int k = 0;
    do
        stringbuffer.append((char)ai[k]);
    while(++k < 16);
    return stringbuffer.toString();
}
0

Lepiej powiedz, która część sprawia problem, bo nie chce się tak wszystkiego przepisywać.
do .. while to jest repeat until tylko z zanegowanym warunkiem. Konstrukcja typu: d = a?b:c to jest to samo co:
if a then d := b else d := c
Tutaj dokładniej to jest rzutowanie znaków '0'..'9' na liczby 0..9 i znaków 'A'..'Z' na 10..36 Więc najładniejszym sposobem (i chyba najszybszym) jest zastosowanie tego co Marooned w FAQ w asm wpisał. Taka malutka pomocnicza funkcja. Drugi taki warunek to zamiana w przeciwną stronę. s.charAt(i), to s[i+1], % to mod, append to + na stringach, copyArray to jest zwykłe przypisanie tablic, czyli ai1 := ai

0

Tak pobieżnie i brzydko:

function AL2Ascii(znak: Byte): Char;
(* copyright &copy; 2003 by Marooned *)
asm
  mov al, znak
   add al,90h 
   daa 
   adc al,40h 
   daa 
end;

function transformKey(s: string): string;
var
  ai, ai1: array [0..15] of Integer;
  i, j, k: Integer;
  c: Byte;
begin
  if length(s) < 16 then
  begin
    transofmKey := "(key to short)";
    Exit;
  end;
  for i := 0 to 15 do
  begin
    c := Ord(s[i+1]);
    (* copyright &copy; 2003 by Marooned *)
    if c > Ord('9') then 
      ai[i] := (c or 32) - 97 
    else 
      ai[i] := c - 48;
  end;
  for i := 0 to 15 do
    ai[i] := f1[ai[i] + i];
  ai1 := ai;
  for i := 0 to 15 do
    ai[i] := (ai[i] + ai1[p1[i]]) mod 62;
  for i := 0 to 15 do
    ai[i] := f2[ai[i] + i];
  ai1 := ai;
  for i := 0 to 15 do
    ai[i] := (ai[i] + ai1[p2[i]]) mod 62;
  for i := 0 to 15 do
    ai[i] := f3[ai[i] + i];
  for k := 0 to 15 do
    stringbuffer := stringbuffer + AL2Ascii(ai[i]);
  transofmKey := stringbuffer;
end;

Trzebaby tu się jeszcze pobawić z optymalizacją, bo to co jest teraz jest straszne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1