Заменить строку на целое число - паскаль - PullRequest
0 голосов
/ 26 января 2019

Я не знаю, как "xa" может конвертировать в 10 в паскалях. Я просто использую:

Val('xa',value,return);

И значение = 10, возвращение = 0. Я просто новичок, кто-нибудь может объяснить это? Я знаю, что это не понравится ASCII, потому что это просто символ.

И я использую Free Pascal:)

Я тестировал в Free Pascal, когда использую xa, 0xa и $xa. Итак, я думаю, что он понимает специальный символ, такой как «$», «0», не вызывая его. Это правильно?

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Начиная с ранних версий 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
0 голосов
/ 26 января 2019

Это не будет работать со всеми компиляторами 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
...