Задать вопрос
@s14e

Код из Delphi в С++!?

Есть простой код на delphi, суть - шифрует серийный номер диска уже проверенной и рабочей функцией:

const
  SEED_SIZE = 16;
  SEED:  array[0..SEED_SIZE - 1] of Byte = (
    $51, $2F, $F6, $AE, $46, $8D, $DE, $5D, $D5, $73, $0A, $6D, $12, $56, $83, $78
  );

  function xordata(InStr: RawByteString; InSize: Integer): RawByteString;
  var
    i, j: Integer;
    bt: byte;
  begin
    SetLength(Result, InSize);
    j := 0;
    for i := 0 to InSize - 1 do
    begin
      if j = 16 then j := 0;
      bt := Byte(InStr[i + 1]) xor SEED[j];
      bt := bt xor i;
      Byte(Result[i + 1]) := bt;
      inc(j);
    end;
  end;

xordata(SERIAL_NUMBER, SERIAL_NUMBER_LENGTH);

Нужно данное решение грамотно перевести на С++. Господа знатоки прошу помочь, как грамотно и кратко написать такой код?
  • Вопрос задан
  • 356 просмотров
Подписаться 1 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
InStr/InSize — немного избыточно по дельфийским меркам и можно преобразоватть в const char* data / size_t length.

Результат — ну std::string, разумеется. Или std::vector<char>. Что вместо SetLength — читай доку.

InStr[i + 1] → data[i]. Остальные массивы нумеруются с нуля, всё как и было.

Inc(j) → ++j.

Мне кажется, этот код механически переписывался с Си на Паскаль и переписать обратно будет несложно.

Ещё тут магическое число 16 — догадайся, на что заменять. Кстати, не стоит размазывать по коду две строки, связанные с j.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы