delphi中类型转换如把一个字符串转成整型,这个装换过程执行了什么操作呢?有点不能理解
发布网友
发布时间:2022-05-30 19:55
我来回答
共1个回答
热心网友
时间:2023-11-08 10:30
delphi7源码system.valLong,用于将字符串包括16进制转换为整数。
各个字符转整数底层一般调用了val函数,val函数原型是_ValLong
function _ValLong(const s: String; var code: Integer): Longint;
var
I: Integer;
Negative, Hex: Boolean;
begin
I := 1;
code := -1;
Result := 0;
Negative := False;
Hex := False;
while (I <= Length(s)) and (s[I] = ' ') do Inc(I);
if I > Length(s) then Exit;
case s[I] of
'$',
'x',
'X': begin
Hex := True;
Inc(I);
end;
'0': begin
Hex := (Length(s) > I) and (UpCase(s[I+1]) = 'X');
if Hex then Inc(I,2);
end;
'-': begin
Negative := True;
Inc(I);
end;
'+': Inc(I);
end;
if Hex then
while I <= Length(s) do
begin
if Result > (High(Result) div 16) then
begin
code := I;
Exit;
end;
case s[I] of
'0'..'9': Result := Result * 16 + Ord(s[I]) - Ord('0');
'a'..'f': Result := Result * 16 + Ord(s[I]) - Ord('a') + 10;
'A'..'F': Result := Result * 16 + Ord(s[I]) - Ord('A') + 10;
else
code := I;
Exit;
end;
end
else
while I <= Length(s) do
begin
if Result > (High(Result) div 10) then
begin
code := I;
Exit;
end;
Result := Result * 10 + Ord(s[I]) - Ord('0');
Inc(I);
end;
if Negative then
Result := -Result;
code := 0;
end;
类型强转
另外 int i =integer(string1) 估计相当于c语言的取得对象到指针,后续用 string1=string(i)相当于将指针接引用为对象、