1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Conversion d'une chiffre base 10 vers base N et vice-versa.

Discussion dans 'Resources' créé par kabeda, Avr 23, 2018.

  1. kabeda

    kabeda Active Member

    Inscrit:
    Avr 23, 2018
    Messages:
    176
    J'aime reçus:
    63
    Bonjour,
    Pour ma première contribution, je vous soumets cette portion de code qui m'a été très utile.


    Explication de convertToBaseN:
    Sert à convertir un entier (base 10) nNombre et retourne sa valeur en base nBaseDestination avec nNiveau de caractères
    Info(convertToBaseN(15484,26,6))
    Résultat : 000MNE


    Explication de ConvertFromBaseN:
    nChaine est un nombre en base nBasedepart et le retour en sa valeur en entioer (base 10)

    Info(ConvertFromBaseN("000MNE",26))
    Résultat : 15484


    Explication de PadLeft:
    Retourne un chaine de caractère InputString de TargetLength de longueur à laquelle on ajoute à gauche autant de PadCharacter qu'il faut. Dans le cas de convertToBaseN, cette fonction est utilisée pour ajouter des zéros (0) à gauche.

    Code (Text):

    FONCTION ConvertFromBaseN(LOCAL nChaine est une chaîne, LOCAL nBasedepart est un entier)
    sValeur, sPosition, swhere, sValTmp est un entier
    Caracter est un caractère
    sValeur=0
    sPosition=1
    swhere= Taille(nChaine)-1
    TANTQUE sPosition <= Taille(nChaine)
       Caracter = Majuscule(Milieu(nChaine, sPosition,1))
       sValTmp    = Asc(Caracter)
       sValTmp = sValTmp>64 ? sValTmp-55 SINON sValTmp-48
       sValeur +=sValTmp*Puissance(nBasedepart,swhere)
       sPosition++
       swhere--
    FIN
    RENVOYER sValeur

    FONCTION convertToBaseN(LOCAL nNombre est un entier, LOCAL nBaseDestination est un entier, nNiveau est un entier)
    sValeur est une chaîne
    TANTQUE nNombre > 0
       nResult est un entier = modulo(nNombre, nBaseDestination)
       sAdd est une chaîne = nResult
       SI nResult > 9 ALORS sAdd = Caract(nResult + 55)
       sValeur = sAdd + sValeur
       nNombre = nNombre / nBaseDestination
    FIN
    sValeur=PadLeft(sValeur, "0", nNiveau)
    RENVOYER sValeur

    PROCEDURE PadLeft(LOCAL InputString est une chaîne, PadCharacter est un caractère, TargetLength est un entier)
    SI TargetLength > Length(InputString) ALORS
       InputString = RepeatString(PadCharacter,TargetLength-Length(InputString)) + InputString
    FIN
    RENVOYER InputString
     
    Merci de commenter.
     
    Tags:
  2. joker

    joker New Member
    MEMBRE WX

    Inscrit:
    Jan 30, 2018
    Messages:
    0
    J'aime reçus:
    14

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour,
    Pour ma première contribution, je vous soumets cette portion de code qui m'a été très utile.


    Explication de convertToBaseN:
    Sert à convertir un entier (base 10) nNombre et retourne sa valeur en base nBaseDestination avec nNiveau de caractères
    Info(convertToBaseN(15484,26,6))
    Résultat : 000MNE


    Explication de ConvertFromBaseN:
    nChaine est un nombre en base nBasedepart et le retour en sa valeur en entioer (base 10)

    Info(ConvertFromBaseN("000MNE",26))
    Résultat : 15484


    Explication de PadLeft:
    Retourne un chaine de caractère InputString de TargetLength de longueur à laquelle on ajoute à gauche autant de PadCharacter qu'il faut. Dans le cas de convertToBaseN, cette fonction est utilisée pour ajouter des zéros (0) à gauche.

    Code (Text):

    FONCTION ConvertFromBaseN(LOCAL nChaine est une chaîne, LOCAL nBasedepart est un entier)
    sValeur, sPosition, swhere, sValTmp est un entier
    Caracter est un caractère
    sValeur=0
    sPosition=1
    swhere= Taille(nChaine)-1
    TANTQUE sPosition <= Taille(nChaine)
       Caracter = Majuscule(Milieu(nChaine, sPosition,1))
       sValTmp    = Asc(Caracter)
       sValTmp = sValTmp>64 ? sValTmp-55 SINON sValTmp-48
       sValeur +=sValTmp*Puissance(nBasedepart,swhere)
       sPosition++
       swhere--
    FIN
    RENVOYER sValeur

    FONCTION convertToBaseN(LOCAL nNombre est un entier, LOCAL nBaseDestination est un entier, nNiveau est un entier)
    sValeur est une chaîne
    TANTQUE nNombre > 0
       nResult est un entier = modulo(nNombre, nBaseDestination)
       sAdd est une chaîne = nResult
       SI nResult > 9 ALORS sAdd = Caract(nResult + 55)
       sValeur = sAdd + sValeur
       nNombre = nNombre / nBaseDestination
    FIN
    sValeur=PadLeft(sValeur, "0", nNiveau)
    RENVOYER sValeur

    PROCEDURE PadLeft(LOCAL InputString est une chaîne, PadCharacter est un caractère, TargetLength est un entier)
    SI TargetLength > Length(InputString) ALORS
       InputString = RepeatString(PadCharacter,TargetLength-Length(InputString)) + InputString
    FIN
    RENVOYER InputString
     
    Merci de commenter.
    Cliquez pour agrandir...
    Bienvenue

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  • joker

    joker New Member
    MEMBRE WX

    Inscrit:
    Jan 30, 2018
    Messages:
    0
    J'aime reçus:
    14
    @Tous
    je viens de trouver :

    // Début copié / collé
    // Convertir un entier décimal dans une base donnée (2 a 99)
    // iNum [in] : Entier sans signe à convertir (0 à 18446744073709551615)
    // iBase [in] : Base dans laquelle convertir
    // Pour les bases <= 36 le résultat est renvoyé sous forme chiffres+lettres sans séparateur
    // Pour les autres bases le résultat est renvoyé dans une chaine ou les entités sont séparées par des " "
    PROCEDURE ConversionBase(iNum,iBase)
    sRes est une chaîne = ""
    iCh est un entier
    sCh est une chaîne
    iVal est un entier sans signe sur 8 = iNum

    SI iNum<0 ALORS RENVOYER "Erreur Valeur"
    SI iBase<2 _OU_ iBase>99 ALORS RENVOYER "Erreur Base"
    SI iVal=0 ALORS RENVOYER "0"

    TANTQUE iVal>0
    iCh=modulo(iVal,iBase)
    SI iBase<=36 ALORS
    SI iCh<=9 ALORS sCh=Caract(48+iCh) SINON sCh=Caract(55+iCh)
    SINON
    sCh=" "+NumériqueVersChaîne(iCh,"02D")
    FIN
    sRes=sCh+sRes
    iVal=PartieEntière(iVal/iBase)
    FIN

    RENVOYER SansEspace(sRes)
    // FIN copié / collé

    Sources :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    testoc35, ProDev et suenodesign aiment ça.
  • Partager cette page

    Chargement...