Keresés

Új hozzászólás Aktív témák

  • Rover623

    félisten

    válasz vamzi #2538 üzenetére

    Ha parázol hogy lebux, használd ezt:

    {ez a rutin a
    Str szövegben megadott számot a
    Base számrendszer (max. 16-os) szerint megpróbalja számmá alakitani.
    Ha a string érvénytelen karaktert is tartalmaz, akkor Code = -1 és a visszaadott érték a hibát okozó karakter poziciója }

    Const
    _Nums : Array [0..16] Of Char = '0123456789ABCDEF'#0;

    Function StrToNum (Str: PChar; Base : Word; Var Code: Integer): LongInt;
    Var
    I : Word; {mindenfélére...pl. ciklusváltozónak is jó lesz}
    Mul, {az aktuális szorzó}
    Work : LongInt; {ebben gyűlik a végeredmény}
    Pozicio : PChar;
    Begin
    Code := 0; {legyünk optimisták...nincs hiba}
    Work := 0; {0-ról indul az eredmény}
    I := StrLen (Str); {milyen hosszú a szöveg?}
    If (I > 0) Then Begin
    {ha legalább egy karakter van a szövegben, akkor hajrá!}
    Mul := 1; {a híres-neves nulladik hatvány}
    StrUpper (Str); {nagybetűsítünk}
    Dec(I); {merthogy a PChar 0-tól indexelődik}
    For I := I Downto 0 Do Begin {végigmászunk a karaktereken}
    Pozicio := StrScan (_Nums, Str [ i ] ); {beazonosítjuk a bütüt}
    If (Pozicio = Nil) Then Begin
    {ha nincs az engedélyezett karakterek között, akkor hiba van!}
    Code := - 1;
    StrToNum := I;
    Exit; {hibával kilépünk}
    End;{if}
    {$IFOPT Q+}
    {$DEFINE OVER}
    {$Q-}
    {$ENDIF}
    Inc (Work, Mul * (Pozicio - _Nums) );{megnöveljük az eredményt}
    Mul := Mul * Base;{ hatványozunk :) }
    {$IFDEF OVER}
    {$Q+}
    {$UNDEF OVER}
    {$ENDIF}
    End; { For }
    End; {ha volt valami a Str-ben}
    StrToNum := Work;{nyilvánossá tesszük a végeredményt}
    End; { StrToNum }

    {a leggyakoribb függények, az általános rutint hívják meg}

    Function HexaVal (HexaString: PChar; Var Code: Integer): LongInt;
    Begin
    HexaVal := StrToNum (HexaString, 16, Code);
    End; { HexaVal }

    Function BinaryVal (BinaryString: PChar; Var Code: Integer): LongInt;
    Begin
    BinaryVal := StrToNum (BinaryString, 2, Code);
    End; { BinaryVal }

    Function DecimalVal (DecimalString: PChar; Var Code: Integer): LongInt;
    Begin
    DecimalVal := StrToNum (DecimalString, 10, Code);
    End; { DecimalVal }

    Mivel rengeteg programozó van a világon, nem állítom hogy más nem oldotta meg hasonlóképpen, de vmivel kisebb az esélye...


    [Szerkesztve]

Új hozzászólás Aktív témák