free将字符串更改为整数 - pascal



我不知道"xa"如何在帕斯卡中转换为10。我只使用:

Val('xa',value,return);

值 = 10,返回 = 0。我只是一个新手,有人可以解释一下吗?我知道这不会喜欢 ASCII 原因只是一个字符。

我正在使用免费的帕斯卡:)

我在 Free Pascal 中测试,当使用 xa0xa$xa 时。所以,我认为它可以理解像"$","0"这样的特殊字符而不调用它。是吗?

从早期的Delphi开始,核心整数转换例程不仅做数字序列,还做一些特殊的,比如Pascal"$924"的十六进制或C风格0x02)。

FreePascal在后来开始添加Delphi兼容性(大约1997-2003)时采用了它。除了这种差异之外,另一个不同之处在于最后一个参数(在您的示例中为 RETURN)从 WORD(在 Turbo Pascal 中)更改为 Delphi 中的整数/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

并比较结果。

请注意,这可能不适用于非常古老的Pascal,如Turbo Pascal和2000年之前的Free Pascals。% 和 & 特定于 FPC,以匹配文字表示法扩展(类似于 $,但用于二进制和八进制)

var x : Integer
begin
x:=%101010;  //42
x:=&101;     //65

这不适用于所有 Pascal 编译器,你也没有说你正在使用什么 Pascal 编译器,但看起来,'xa' 中的 x 表示这是一个十六进制(基数 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

最新更新