Delphi中的C风格十六进制数-未记录的功能?

4
我偶然发现以下代码:
var
  I: Integer;

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

在Delphi 2009中使用是可以的。顺便说一下,这个功能帮助我从C头文件中提取十六进制常量。

我想知道是否可以继续使用这个功能,或者这个功能将在未来版本中被“修复”?


1
这不是一个需要修复的错误或问题。这只是 StrToInt() 需要执行的操作,将字符串转换为整数。而且该字符串必须包含一个整数值,无论它的格式是什么。 - Azad Salahli
1
不,@Azad,我可以想到很多整数写法格式是StrToInt无法接受的。八进制和二进制就是其中之一。 - Rob Kennedy
@Rob Kennedy,抱歉我并不是想说StrToInt必须接受你写的任何内容。我只是想说如果它能正常工作,那就没有问题。而且我不认为这会被修复 :) - Azad Salahli
2个回答

12

这是一个特性,你可以依赖它。Turbo Pascal 演进为 Delphi 过程中发生了一些哲学上的变化,即承认 Delphi 生存在以 C 语言为主导的世界中,通过优雅地接受或容忍 C 构造更有利于 Delphi 的开发者,而不是忽略 C 构造并强制让 Delphi 开发者自行解决。和 C++ Builder 的互操作性如 Rob 所提到的是一个因素,但还有一个原因是 Delphi 最初是为 Windows 设计的,在 Windows API 中有很多 C 语言构造。

我想“阻抗失配”这个术语可能适用于这里——将 Delphi 的十六进制处理方式与“其他地方”之间的阻抗失配消除非常简单,所以我们这样做了。


很高兴在SO上见到Thorpe先生。 - Warren P

4
请注意,Delphi RTL也被C++ Builder使用。文档没有详细说明当它说StrToInt接受“十进制或十六进制表示法”时具体意味着什么。您可以放心地期望StrToInt继续接受C风格的数字。 Val接受相同的输入,Read也是如此(因为它们最终都调用System._ValLong)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接