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
» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Conversion décimale hexadécimale. Emptypar Klaus Aujourd'hui à 12:13

» PANORAMIC V 1
Conversion décimale hexadécimale. Emptypar papydall Aujourd'hui à 3:22

» select intégrés [résolu]
Conversion décimale hexadécimale. Emptypar jjn4 Hier à 17:00

» number_mouse_up
Conversion décimale hexadécimale. Emptypar jjn4 Hier à 11:59

» Aide de PANORAMIC
Conversion décimale hexadécimale. Emptypar jjn4 Hier à 11:16

» trop de fichiers en cours
Conversion décimale hexadécimale. Emptypar lepetitmarocain Hier à 10:43

» Je teste PANORAMIC V 1 beta 1
Conversion décimale hexadécimale. Emptypar papydall Hier à 4:17

» bouton dans autre form que 0
Conversion décimale hexadécimale. Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Conversion décimale hexadécimale. Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Conversion décimale hexadécimale. Emptypar Klaus Lun 6 Mai 2024 - 10:23

» @Jack
Conversion décimale hexadécimale. Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Conversion décimale hexadécimale. Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Conversion décimale hexadécimale. Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Conversion décimale hexadécimale. Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Conversion décimale hexadécimale. Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -28%
Brandt LVE127J – Lave-vaisselle encastrable 12 ...
Voir le deal
279.99 €

 

 Conversion décimale hexadécimale.

Aller en bas 
2 participants
AuteurMessage
Tecking




Nombre de messages : 114
Age : 35
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 : 7095
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 : 35
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 : 7095
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 : 35
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 : 7095
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 : 35
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 : 7095
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 texte en rtf
» Conversion TSL/RVB
» Conversion txt en rtf
» Conversion RGB/HSV
» Conversion d'unités

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: