FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Conversion décimale hexadécimale. Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Conversion décimale hexadécimale. Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Conversion décimale hexadécimale. Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Conversion décimale hexadécimale. Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Conversion décimale hexadécimale. Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Conversion décimale hexadécimale. Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Conversion décimale hexadécimale. Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Conversion décimale hexadécimale. Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Conversion décimale hexadécimale. Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Conversion décimale hexadécimale. Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Conversion décimale hexadécimale. Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Conversion décimale hexadécimale. Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Conversion décimale hexadécimale. Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Conversion décimale hexadécimale. Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Conversion décimale hexadécimale. Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
LEGO Icons 10331 – Le martin-pêcheur
35 €
Voir le deal

 

 Conversion décimale hexadécimale.

Aller en bas 
2 participants
AuteurMessage
Tecking




Nombre de messages : 114
Age : 36
Localisation : Toulouse
Date d'inscription : 30/05/2010

Conversion décimale hexadécimale. Empty
MessageSujet: Conversion décimale hexadécimale.   Conversion décimale hexadécimale. EmptyMer 28 Juil 2010 - 23:04

En attendant que JACK intègre ces outils de conversion,
je vous propose d'intégrer ceci :

Entête :

Code:

DIM HEXA%, HEXA$, HEXABUF%, HEXABUF$, HEXLENGH%, HEXACONT%, HEXDECOK%
LABEL HEXACODE, HEXADECO

Corps :

Code:


HEXACODE:

HEXLENGH% = HEXLENGH% -1
HEXA$ = ""

REPEAT
    HEXLENGH% = HEXLENGH% + 1
UNTIL POWER(16, HEXLENGH%) > HEXA%

FOR HEXACONT% = 1 TO HEXLENGH%

    HEXABUF%  = INT(HEXA%/POWER(16, HEXLENGH% - HEXACONT%))

    IF HEXABUF% < 10
        HEXA$ = HEXA$ + STR$(HEXABUF%)
    ELSE
        SELECT HEXABUF%
        CASE 10
            HEXA$ = HEXA$ + "A"
        CASE 11
            HEXA$ = HEXA$ + "B"
        CASE 12
            HEXA$ = HEXA$ + "C"
        CASE 13
            HEXA$ = HEXA$ + "D"
        CASE 14
            HEXA$ = HEXA$ + "E"
        CASE 15
            HEXA$ = HEXA$ + "F"
        END_SELECT
    END_IF

    HEXA% = HEXA% - (HEXABUF% * POWER(16, HEXLENGH% - HEXACONT%))

NEXT HEXACONT%

HEXLENGH% = 0

RETURN

HEXADECO:

HEXLENGH% = LEN(HEXA$)
HEXA% = 0

FOR HEXACONT% = 1 TO HEXLENGH%

    HEXABUF$  = MID$(HEXA$, HEXACONT%, 1)

    IF NUMERIC(HEXABUF$) = 1
        HEXA% = HEXA% + (VAL(HEXABUF$) * POWER(16, HEXLENGH% - HEXACONT%))
    ELSE
        IF HEXABUF$ = "A"
            HEXA% = HEXA% + (10 * POWER(16, HEXLENGH% - HEXACONT%))
            HEXDECOK% = 1
        END_IF
        IF HEXABUF$ = "B"
            HEXA% = HEXA% + (11 * POWER(16, HEXLENGH% - HEXACONT%))
            HEXDECOK% = 1
        END_IF
        IF HEXABUF$ = "C"
            HEXA% = HEXA% + (12 * POWER(16, HEXLENGH% - HEXACONT%))
            HEXDECOK% = 1
        END_IF
        IF HEXABUF$ = "D"
            HEXA% = HEXA% + (13 * POWER(16, HEXLENGH% - HEXACONT%))
            HEXDECOK% = 1
        END_IF
        IF HEXABUF$ = "E"
            HEXA% = HEXA% + (14 * POWER(16, HEXLENGH% - HEXACONT%))
            HEXDECOK% = 1
        END_IF
        IF HEXABUF$ = "F"
            HEXA% = HEXA% + (15 * POWER(16, HEXLENGH% - HEXACONT%))
            HEXDECOK% = 1
        END_IF
        IF HEXDECOK% = 0
            MESSAGE "'" + HEXABUF$ + "' n'est pas un carractère hexadécimal"
            TERMINATE
        END_IF
        HEXDECOK% = 0
       
    END_IF

NEXT HEXACONT%

RETURN


Le principe est simple :

Conversion Hexa -> Décimale

Copier la variable string dans HEXA$ (seul les caractères 0123456789ABCDEF sont permis).
Appeller HEXADECO par un GOSUB
récupérer la valeur par HEXA% sous forme numérique.

Conversion Decimale -> Hexa

Copier la variable numérique entière dans HEXA%.
Appeller HEXACODE par un GOSUB
récupérer la valeur par HEXA$ sous forme string.

Petite astuce, le code ci présant et tel quel est prevu pour permettre à l'usager de modifier la longueur de HEXA$ dans le cadre d'une conversion decimale vers hexadecimale.
En effet, modifier HEXLENGH% modifie la taille de HEXA$ tel que LEN(HEXA$) = HEXLENGH%.
Attention cependant, si la valeur hexadécimale dépasse le nombre de caractères définit par HEXLENGH%, par soucis de résultat juste, HEXLENGH% sera redimentionné et HEXA$ ne sera pas tronqué.

Seconde astuce, vous remarquerez des puissances de 16 un peux partout.
modifier cette valeur, modifie la base de conversion.
Ainsi remplacer "16" par "2" fait de ce convertisseur un convertisseur binaire.
Faire de même avec "8" en fait un convertisseur octal.
Nota : si vous voulez en faire un convertisseur base 32 ou 64, n'oubliez pas d'ajouter des valeurs apres ABCDEF...

Very Happy
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Conversion décimale hexadécimale. Empty
MessageSujet: Re: Conversion décimale hexadécimale.   Conversion décimale hexadécimale. EmptyMer 28 Juil 2010 - 23:33

Plutôt que ta série de tests sur A, B, C... tu aurais pu le faire en une fois:
au lieu de mettre 10 pour A, 11 pour B, 12 pour C etc. tu faisais
ASC(HEXABUF$)-55, qui donne 10 pour A, 11 pour B etc...


On peut quand même faire beaucoup plus court:

Code:
DecHex:
' conversion décimal/hexa de d, résultat vh$ (complété si utile à lh% caractères)
vh$="": IF lh% < 1 THEN lh% = 1
REPEAT
    vh$ = MID$("0123456789ABCDEF", 16*(d/16-INT(d/16))+1, 1) + vh$: d = INT(d/16)
UNTIL d <= 0
IF LEN(vh$) < lh% THEN vh$ = STRING$(lh% - LEN(vh$), "0") + vh$
RETURN

HexDec:
' conversion hexadécimal/décimal de vh$, résultat dans d
d = 0
FOR k% = 1 TO LEN(vh$)
    d = d*16 + INSTR("0123456789ABCDEF", MID$(vh$, k%, 1))-1
NEXT k%
RETURN
Revenir en haut Aller en bas
Tecking




Nombre de messages : 114
Age : 36
Localisation : Toulouse
Date d'inscription : 30/05/2010

Conversion décimale hexadécimale. Empty
MessageSujet: Re: Conversion décimale hexadécimale.   Conversion décimale hexadécimale. EmptyMer 28 Juil 2010 - 23:44

J'ai trouvé mon maître.

16*(d/16-INT(d/16))+1 donne la retenue de la division?
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Conversion décimale hexadécimale. Empty
MessageSujet: Re: Conversion décimale hexadécimale.   Conversion décimale hexadécimale. EmptyJeu 29 Juil 2010 - 8:01

16*(d/16-INT(d/16)) donne le reste entier de la division d/16 (donc entre 0 et 15), +1 parce que ça servira d'index dans la chaîne "0...F".
Revenir en haut Aller en bas
Tecking




Nombre de messages : 114
Age : 36
Localisation : Toulouse
Date d'inscription : 30/05/2010

Conversion décimale hexadécimale. Empty
MessageSujet: Re: Conversion décimale hexadécimale.   Conversion décimale hexadécimale. EmptyJeu 29 Juil 2010 - 14:17

Judicieuse remarque.

Je l'ai remis à ma sauce avec contrôle des erreurs (HEXA% = 0)
et reglage de la base 2 8 10 16 etc
et des caractères

Code:

DIM HEXA%, HEXA$, HEXLENGH%, HEXCOUNT%, BASE%, BASE$
BASE% = 16
BASE$ = "0123456789ABCDEF"
LABEL HEXACODE, HEXADECO

HEXA$ = MESSAGE_INPUT$("HEXA", "HEXA$ =", "0123456789ABCDEF")
PRINT HEXA$
GOSUB HEXADECO
PRINT HEXA%
GOSUB HEXACODE
PRINT HEXA$

END

HEXACODE:

HEXLENGH% = HEXLENGH% - 1
HEXA$ = ""

REPEAT
    HEXLENGH% = HEXLENGH% + 1
UNTIL POWER(16, HEXLENGH%) > HEXA%

IF HEXA% > 0
    FOR HEXCOUNT% = 1 TO HEXLENGH%
        HEXA$ = HEXA$ + MID$(BASE$, INT(HEXA%/POWER(BASE%, HEXLENGH% - HEXCOUNT%)) + 1, 1)
        HEXA% = HEXA% - INT(HEXA%/POWER(BASE%, HEXLENGH% - HEXCOUNT%)) * POWER(BASE%, HEXLENGH% - HEXCOUNT%)
    NEXT HEXCOUNT%
ELSE
    IF  HEXLENGH% = 0
        HEXLENGH% = 1
    END_IF
    HEXA$ = STRING$(HEXLENGH%, "0")
END_IF

HEXLENGH% = 0

RETURN

HEXADECO:

HEXLENGH% = LEN(HEXA$)
HEXA% = 0

FOR HEXCOUNT% = 1 TO HEXLENGH%
    HEXA% = HEXA% * BASE% + INSTR(BASE$, MID$(HEXA$, HEXCOUNT%, 1)) - 1
NEXT HEXCOUNT%

HEXLENGH% = 0

RETURN
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Conversion décimale hexadécimale. Empty
MessageSujet: Re: Conversion décimale hexadécimale.   Conversion décimale hexadécimale. EmptyJeu 29 Juil 2010 - 14:29

C'est déjà beaucoup plus compact.

Cela dit, je ne sais pas si c'est une bonne idée de donner le même nom à des variables de types différents (je ne savais même pas que c'était possible), parce que ça prête à confusion: Hexa% et Hexa$, Base% et Base$ ...
Revenir en haut Aller en bas
Tecking




Nombre de messages : 114
Age : 36
Localisation : Toulouse
Date d'inscription : 30/05/2010

Conversion décimale hexadécimale. Empty
MessageSujet: Re: Conversion décimale hexadécimale.   Conversion décimale hexadécimale. EmptyJeu 29 Juil 2010 - 19:59

au contraire je sait que HEXA est la valeur d'entrée % et $ me permettent de choisir de quelle base je pars et à quelle base j'arrive.
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Conversion décimale hexadécimale. Empty
MessageSujet: Re: Conversion décimale hexadécimale.   Conversion décimale hexadécimale. EmptyJeu 29 Juil 2010 - 20:05

si tu le dis...
Revenir en haut Aller en bas
Contenu sponsorisé





Conversion décimale hexadécimale. Empty
MessageSujet: Re: Conversion décimale hexadécimale.   Conversion décimale hexadécimale. Empty

Revenir en haut Aller en bas
 
Conversion décimale hexadécimale.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Conversion hexadécimale d’un nombre au format intel
» Conversion RGB/HSV
» Conversion TSL/RVB
» Conversion PSI <=>BAR
» Conversion txt en rtf

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: