Заменить строку на целое число - паскаль

Я не знаю, как "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
Другие вопросы по тегам