Шестнадцатеричные числа в стиле C в Delphi - недокументированная функция? - PullRequest
4 голосов
/ 15 февраля 2011

Я случайно заметил, что следующий код

var
  I: Integer;

begin
  I:= StrToInt('0xAA');
  ShowMessage(IntToStr(I));  // shows 170 = $AA
end;

нормально работает в Delphi 2009. Кстати, эта функция помогла мне извлечь шестнадцатеричные константы из файла заголовка C.

Интересно, можно ли использовать эту функцию или эта функция будет «исправлена» в будущих версиях?

Ответы [ 2 ]

12 голосов
/ 15 февраля 2011

Это особенность, и вы можете положиться на нее.Одним из философских изменений, произошедших в эволюции Turbo Pascal в Delphi, стало признание того, что Delphi живет в мире, где доминирует C, и было больше того, что можно было бы получить, грациозно принимая или терпя C-измы, чем игнорируя их и заставляя разработчика Delphiчтобы разобраться.Взаимодействие с C ++ Builder, как упомянуто Робом, было одним из факторов, но тот факт, что Delphi был спроектирован в первую очередь для Windows, а Windows имеет много артефактов языка C в Windows API.

Я думаю, что термин "здесь может применяться несоответствие импеданса »- это было достаточно просто, чтобы устранить несоответствие импеданса между обработкой шестнадцатеричных Delphi и« Остальным миром », что мы и сделали.

4 голосов
/ 15 февраля 2011

Напомним, что Delphi RTL также используется C ++ Builder. Документация не дает подробных сведений о том, что именно это означает, когда говорится, что StrToInt принимает «десятичное или шестнадцатеричное представление». Вы можете спокойно ожидать, что StrToInt продолжит принимать номера в стиле C.

Val принимает тот же ввод, что и Read (потому что все они в конечном итоге вызывают System._ValLong).

...