Есть ли эквивалент для: HEX и: OCT в текущем Паскале? - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь преобразовать старую программу на Паскале в ту, которая компилируется (и работает) со Свободным Паскалем. Один механизм, с которым я столкнулся, - это своего рода преобразование, выполняемое при чтении значения:

readln (file,ValueHex:HEX);

или

readln (file,ValueOct:OCT);

В последнем случае, когда значение читается в файлебыло "12" (восьмеричное значение), значение, сохраненное в "MyValue", было "10" (десятичное значение).

Для записи этих значений код был:

writeln (hex(ValueHex,4), oct(ValueOct,3));

и теперь это:

writeln (HEXSTR(ValueHex,4), OCTSTR(ValueOct,4));

Письменная часть работает, как и предполагалось, но во всей документации Free Pascal я не смог найти эквивалент : HEX и : OCT , он вообще существует или мне нужно написать специальные функции, преобразующие шестнадцатеричные и восьмеричные значения в десятичные?

1 Ответ

3 голосов
/ 31 октября 2019

Нет. Вам нужно будет прочитать как строку и сделать преобразование самостоятельно. Я даже не слышал об этих расширениях раньше, поэтому, вероятно, это не обычное расширение. Какой это диалект?

Обратите внимание, что FreePascal также поддерживает & как восьмеричный и% как двоичный префикс.

uses sysutils;
begin
  Writeln (StrToInt('$1234'));
  Writeln (StrToInt('&1000'));
  Writeln (StrToInt('%1010101'));
end.

Для шестнадцатеричного кода также есть опция без префикса: https://www.freepascal.org/docs-html/rtl/strutils/hex2dec.html

...