-1 delphi pascal freepascal turbo-pascal
我不知道“xa”如何在 pascal 中转换为 10。我只是使用:
Val('xa',value,return);
Run Code Online (Sandbox Code Playgroud)
并且 value = 10,return = 0。我只是一个新手,有人可以解释一下吗?我知道这不会喜欢只是一个字符的 ASCII 原因。
我正在使用 Free Pascal :)
我在 Free Pascal 中进行了测试,当使用xa,0xa和$xa. 所以,我认为它理解像“$”、“0”这样的特殊字符而不调用它。那正确吗?
从早期的 Delphi 开始,核心整数转换例程不仅可以执行数字序列,还可以执行一些特殊功能,例如用于十六进制或 C 样式 0x02 的 Pascal "$924"。
FreePascal 在后来开始添加 Delphi 兼容性时采用了它(大约在 1997-2003 年)。除了这种差异之外,另一个不同之处是最后一个参数(在您的示例中为 RETURN)从 WORD(在 Turbo Pascal 中)更改为 Delphi 中的 integer/longint。
IOW,例程接受 x 并认为您的意思是转换 C 样式的十六进制数,然后根据 Stuart 的表解释“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
Run Code Online (Sandbox Code Playgroud)
并比较结果。
请注意,这可能不适用于 2000 年之前的非常古老的 Pascal,例如 Turbo Pascal 和 Free Pascal。 % 和 & 是 FPC 特定的,以匹配文字符号扩展(类似于 $,但适用于二进制和八进制)
var x : Integer
begin
x:=%101010; //42
x:=&101; //65
Run Code Online (Sandbox Code Playgroud)