Проблема StrToInt64 в Inno

nik1967

Old Men
Проверенный
Здравствуйте!
Появилась проблема, с которой в силу скудности познаний сам справится не смог.
Имеется строковый параметр, состоящий из, скажем 11 цифр. Нужно преобразовать его в цифру. Казалось бы чего проще:
Код:
StrToInt('97298061918');
Но не тут то было! Больше 8 знаков преобразовывать не хочет ни в какую. В дельфи в таком случае можно было попробовать воспользоваться функцией StrToInt64, но в Inno такого нет!
В своё время Андрей написал функцию для примера IsMd5:
Код:
function Size64(Hi, Lo: Integer): Extended;
begin
  Result:= Lo;
  if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
  for Hi:= Hi-1 Downto 0 do
  Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
end;

function GetFileSize(const FileName: string): Extended;
var
  FSR: TFindRec;
begin
  Result:= 0;
  if FindFirst(FileName, FSR) then
    try
      if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
        Result:= Size64(FSR.SizeHigh, FSR.SizeLow) div 1048576;
    finally
      FindClose(FSR);
    end;
end;
но опять же у меня не хватило познаний (а может и мозгов), что бы это приспособить. Надеюсь, я ясно изложил проблему. Люди добрые, поможите, чем сможите!
 

Krinkels

Он где то тут
Администратор
nik1967, вот вариант на плюсах:
C++:
double _atoi( const char * str )
{
    double res = 0;
    for( ; *str; res += *str++ - '0' )
        res *= 10;
    return res;
}
 

Shegorat

Lord of Madness
Администратор
nik1967
Ну как-то так
Код:
function StrToInt64(str: String): Extended;
var
  i: Integer;
begin
  Result:= 0;
  for i:= 1 to Length(str) do begin
    Result:= Result*10 + (Ord(str[i]) - Ord('0'));
  end;
end;
Но только для целочисленных значений.
Для дробных нужно дополнительно обрабатывать дробную часть.
 
Сверху