Заменить строку на целое число - паскаль
Я не знаю, как "XA" может конвертировать в 10 в паскале. Я просто использую:
Val('xa',value,return);
И значение = 10, возвращение = 0. Я просто новичок, кто-нибудь может объяснить это? Я знаю, что это не понравится ASCII, потому что это просто персонаж.
И я использую Free Pascal:)
Я тестировал в Free Pascal, когда использую xa
, 0xa
а также $xa
, Итак, я думаю, что он понимает специальный символ, такой как "$","0", не вызывая его. Это правильно?
2 ответа
Начиная с ранних версий Delphi, основные целочисленные процедуры преобразования не только выполняют числовые последовательности, но и некоторые специальные предложения, такие как Паскаль "$924" для шестнадцатеричного или C-стиля 0x02).
FreePascal принял его, когда позже начал добавлять совместимость с Delphi (примерно 1997-2003). Помимо этой разницы, другое отличие состоит в том, что последний параметр (RETURN в вашем примере) изменился с WORD (в Turbo Pascal) на integer/longint в Delphi.
IOW, подпрограмма принимает x и думает, что вы хотите преобразовать шестнадцатеричное число в стиле C, а затем интерпретирует "a" согласно таблице Стюарта.
Он также интерпретирует% как двоичный, а & как восьмеричный.
Пытаться
val('$10',value,return);
writeln(value,' ' ,return); // 16 0
val('&10',value,return);
writeln(value,' ' ,return); // 8 0
val('%10',value,return);
writeln(value,' ' ,return); // 2 0
и сравните результаты.
Обратите внимание, что это, вероятно, не будет работать для очень старых Pascal, таких как Turbo Pascal и Free Pascals, выпущенных до 2000 года.% И & являются специфичными для FPC для соответствия буквенным расширениям обозначений (аналогично $, но для двоичного и восьмеричного)
var x : Integer
begin
x:=%101010; //42
x:=&101; //65
Это не будет работать со всеми компиляторами Pascal, и вы не сказали, какой компилятор Pascal вы используете, но похоже, что x в 'xa' говорит, что это шестнадцатеричное (основание 16) число, и значение цифры в шестнадцатеричном числе следующие:
Digit Value 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 a 10 A 10 b 11 B 11 c 12 C 12 d 13 D 13 e 14 E 14 f 15 F 15