将字符串更改为整数-pascal

时间:2019-01-26 09:02:17

标签: pascal freepascal delphi turbo-pascal

我不知道“ xa”如何转换为10帕斯卡。我只用:

Val('xa',value,return);

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

我正在使用Free Pascal:)

我在使用xa0xa$xa时在Free Pascal中进行了测试。因此,我认为它无需调用即可理解诸如“ $”,“ 0”之类的特殊字符。是吗?

2 个答案:

答案 0 :(得分:3)

自早期的Delphi以来,核心整数转换例程不仅执行数字序列,而且还执行一些特殊操作,例如Pascal“ $ 924”(十六进制)或C样式0x02)。

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

并比较结果。

请注意,这可能不适用于非常老的Pascal(如Turbo Pascal)和2000年前的Free Pascals。%和&是FPC专用的,以匹配文字符号扩展名(类似于$,但适用于二进制和八进制)

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

答案 1 :(得分:1)

这不适用于所有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