FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Mah-Jong américain
par Jean Claude Hier à 19:37

» StratégoV8 et V9
par Jean Claude Hier à 13:18

» Problème avec Deepl
par Klaus Hier à 0:34

» Déformation d'image en trapèze
par Klaus Dim 14 Jan 2018 - 16:22

» Quelques nouvelles ...
par Jean Claude Ven 12 Jan 2018 - 22:40

» Renommer les instructions ITEM_... ?
par Jicehel Ven 12 Jan 2018 - 18:56

» Ludothèque Panoramic
par jjn4 Ven 12 Jan 2018 - 18:11

» sous-programmes et fonctions
par Jack Ven 12 Jan 2018 - 17:51

» KGF_dll - nouvelles versions
par Minibug Ven 12 Jan 2018 - 0:21

» Mah-Jong français
par Jean Claude Jeu 11 Jan 2018 - 22:15

» HVIEWER
par Klaus Mer 10 Jan 2018 - 2:06

» panoramic 0.9.28
par gigi75 Ven 5 Jan 2018 - 14:06

» Un jeu qui va vous énerver!
par Jean Claude Jeu 4 Jan 2018 - 22:05

» Bonne fêtes de fin d'année ! Meilleurs Vœux 2018 !
par Jicehel Jeu 4 Jan 2018 - 17:28

» Mah-Jong international
par jjn4 Jeu 4 Jan 2018 - 16:55

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Janvier 2018
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
293031    
CalendrierCalendrier

Partagez | 
 

 Convertisseur binaire vers décimal / Hexadécimal

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Convertisseur binaire vers décimal / Hexadécimal   Dim 26 Nov 2017 - 14:38

Bonjour à tous !

Voici un convertisseur binaire vers décimal/hexadécimal organisé en 4 octets (4 x 8 bits), utilisable en 2 words (2 x 16 bits) ou en Dword (1 x 32 bit).
A l’aide des 32 boutons numérotés de 0 à 31, on peut activer n’importe quel bit et obtenir la valeur décimale/hexadécimale correspondante.

ATTENTION : il est conçu pour convertir des entiers non signés !

Parfois plus simple que l’utilisation d’une calculatrice où il faut à chaque fois retaper l’ensemble de la valeur binaire pour avoir le résultat, cet utilitaire peut s’avérer utile, surtout en électronique.

Bonne journée à tous !

Code:
' ------------------------------------------------------------------------------
'  PANORAMIC BINARY TO DECIMAL / HEXADECIMAL FOR UNSIGNED INTEGER
'  MARC - November 2017 - Panoramic v0.9.28.i12
'  http://panoramic-language.pagesperso-orange.fr/French/index.html
'  http://panoramic.top-forum.net
' ------------------------------------------------------------------------------
WIDTH 0, 900
HEIGHT 0, 400
LEFT 0,(screen_x-900)/2
TOP 0,(screen_y-400)/2
LABEL BitState, Reset
DIM i%, bit%, x, Poids%
DIM Result$, Octet1$, Octet2$, Octet3$, Octet4$, Word1$, Word2$
DIM Hexa1$, Hexa2$, Hexa3$, Hexa4$
DIM StateButton%(32)
FONT_NAME 0,"Arial"
FONT_SIZE 0, 12
FOR i% = 1 TO 8
    BUTTON i%
    LEFT i%, 25*i%
    TOP i%, 110
    WIDTH i%, 25
    HEIGHT i%, 25
    ALPHA i%+100
    LEFT i%+100, (25*i%)+4
    TOP i%+100, 85
    WIDTH i%+100, 25
    HEIGHT i%+100, 25
    CAPTION i%+100,32-i%
NEXT i%
FOR i% = 9 to 16
    BUTTON i%
    LEFT i%, 10+(25*i%)
    TOP i%, 110
    WIDTH i%, 25
    HEIGHT i%, 25
    ALPHA i%+100
    LEFT i%+100, (25*i%)+14
    TOP i%+100, 85
    WIDTH i%+100, 25
    HEIGHT i%+100, 25
    CAPTION i%+100,32-i%
NEXT i%
FOR i% = 17 TO 24
    BUTTON i%
    LEFT i%, 20+(25*i%)
    TOP i%, 110
    WIDTH i%, 25
    HEIGHT i%, 25
    ALPHA i%+100
    LEFT i%+100, (25*i%)+24
    IF i% = 24 THEN LEFT i%+100, (25*i%)+28
    IF i% = 23 THEN LEFT i%+100, (25*i%)+28
    TOP i%+100, 85
    WIDTH i%+100, 25
    HEIGHT i%+100, 25
    CAPTION i%+100,32-i%
NEXT i%
FOR i% = 25 to 32
    BUTTON i%
    LEFT i%, 30+(25*i%)
    TOP i%, 110
    WIDTH i%, 25
    HEIGHT i%, 25
    ALPHA i%+100
    LEFT i%+100, (25*i%)+38
    TOP i%+100, 85
    WIDTH i%+100, 25
    HEIGHT i%+100, 25
    CAPTION i%+100,32-i%
NEXT i%
FOR i% = 1 to 32
    CAPTION i% , "0"
    StateButton%(i%) = 0
NEXT i%
ALPHA 33
    TOP 33,35
    LEFT 33,125
    FONT_SIZE 33,16
    CAPTION 33,"BINARY TO DECIMAL / HEXADECIMAL FOR UNSIGNED INTEGER"
ALPHA 34
    TOP 34, 250
    LEFT 34, 250
    FONT_SIZE 34, 16
ALPHA 35
    TOP 35, 150
    LEFT 35, 250
    FONT_SIZE 35, 16
ALPHA 36
    TOP 36, 150
    LEFT 36, 250
    FONT_SIZE 36, 16
ALPHA 37
    TOP 37, 150
    LEFT 37, 250
    FONT_SIZE 37, 16
ALPHA 38
    TOP 38, 150
    LEFT 38, 250
    FONT_SIZE 38, 16
ALPHA 39
    TOP 39, 200
    LEFT 39, 250
    FONT_SIZE 39, 16
ALPHA 40
    TOP 40, 200
    LEFT 40, 250
    FONT_SIZE 40, 16
FOR i% = 41 to 44
BUTTON i%
    WIDTH i%, 100
    TOP i%,300
    LEFT i%,210*i%-8523
    CAPTION i%, "Reset "+STR$(45-i%)
    ON_CLICK i%,Reset
NEXT i%
FOR i% = 1 to 32
    ON_CLICK i%, BitState
NEXT i%
LINES()
END
' ------------------------------------------------------------------------------
BitState:
    i%=NUMBER_CLICK
    IF StateButton%(i%) = 0
        StateButton%(i%) = 1
        Caption i%, "1"
    ELSE
        StateButton%(i%) = 0
        CAPTION i%,"0"
    END_IF
    Lines()    
    Octet1Display()
    Octet2Display()
    Octet3Display()
    Octet4Display()
    Word1Display()
    Word2Display()
    DwordDisplay()
RETURN  
' ------------------------------------------------------------------------------
SUB Octet4Display()
    DIM_LOCAL a$,j%
    x = 0
    FOR Bit% = 8 TO 1 STEP -1
        IF StateButton%(Bit%) = 1 THEN x = x + POWER(2,8-Bit%)
    NEXT Bit%
    Hexa4$=HEX$(x)
    IF LEN(Hexa4$)=1 THEN Hexa4$="0"+Hexa4$
    a$=STR$(x)+" - 0x"+Hexa4$
    j%=TEXT_WIDTH(a$,38)
    LEFT 38, ((885-j%)/2)-317
    CAPTION 38, a$
END_SUB
' ------------------------------------------------------------------------------
SUB Octet3Display()
    DIM_LOCAL a$,j%
    x = 0
    FOR Bit% = 16 TO 9 STEP -1
        IF StateButton%(Bit%) = 1 THEN x = x + POWER(2,16-Bit%)
    NEXT Bit%
    Hexa3$=HEX$(x)
    IF LEN(Hexa3$)=1 THEN Hexa3$="0"+Hexa3$
    a$=STR$(x)+" - 0x"+Hexa3$
    j%=TEXT_WIDTH(a$,37)
    LEFT 37, ((885-j%)/2)-107
    CAPTION 37, a$
END_SUB
' ------------------------------------------------------------------------------
SUB Octet2Display()
    DIM_LOCAL a$,j%
    x = 0
    FOR Bit% = 24 TO 17 STEP -1
        IF StateButton%(Bit%) = 1 THEN x = x + POWER(2,24-Bit%)
    NEXT Bit%
    Hexa2$=HEX$(x)
    IF LEN(Hexa2$)=1 THEN Hexa2$="0"+Hexa2$
    a$=STR$(x)+" - 0x"+Hexa2$
    j%=TEXT_WIDTH(a$,36)
    LEFT 36, ((885-j%)/2)+103
    CAPTION 36, a$
END_SUB
' ------------------------------------------------------------------------------
SUB Octet1Display()
    DIM_LOCAL a$,j%
    x = 0
    FOR Bit% = 32 TO 25 STEP -1
        IF StateButton%(Bit%) = 1 THEN x = x + POWER(2,32-Bit%)
    NEXT Bit%
    Hexa1$=HEX$(x)
    IF LEN(Hexa1$)=1 THEN Hexa1$="0"+Hexa1$
    a$=STR$(x)+" - 0x"+Hexa1$
    j%=TEXT_WIDTH(a$,35)
    LEFT 35, ((885-j%)/2)+313
    CAPTION 35, a$
END_SUB
' ------------------------------------------------------------------------------
SUB Word1Display()
    DIM_LOCAL a$,j%
    x = 0
    FOR Bit% = 32 TO 17 STEP -1
        IF StateButton%(Bit%) = 1 THEN x = x + POWER(2,32-Bit%)
    NEXT Bit%
    a$=STR$(x)+" - 0x"+Hexa2$+Hexa1$
    j%=TEXT_WIDTH(a$,39)
    LEFT 39, ((885-j%)/2)+207
    CAPTION 39, a$
END_SUB
' ------------------------------------------------------------------------------
SUB Word2Display()
    DIM_LOCAL a$,j%
    x = 0
    FOR Bit% = 16 TO 1 STEP -1
        IF StateButton%(Bit%) = 1 THEN x = x + POWER(2,16-Bit%)
    NEXT Bit%
    a$=STR$(x)+" - 0x"+Hexa4$+Hexa3$
    j%=TEXT_WIDTH(a$,40)
    LEFT 40, ((885-j%)/2)-210
    CAPTION 40, a$
END_SUB
' ------------------------------------------------------------------------------
SUB DwordDisplay()
  DIM_LOCAL j%, k%, a$, b$
    x = 0
    FOR Bit% = 32 TO 1 STEP -1
        IF StateButton%(Bit%) = 1 THEN x = x + POWER(2,32-Bit%)
    NEXT Bit%
    Result$=""
    k%=0
    a$=STR$(x)
    j%=LEN(a$)
    FOR i%= j% TO 1 STEP -1
        k%=k%+1
        b$=MID$(a$,i%,1)
        Result$=b$+Result$
        IF k%=3 AND i% > 1
            Result$=chr$(46)+Result$
            K%=0
        END_IF
    NEXT i%
    Result$=Result$+" - 0x"+Hexa4$+Hexa3$+" "+Hexa2$+Hexa1$
    j%=TEXT_WIDTH(Result$,34)
    LEFT 34, (885-j%)/2
    CAPTION 34, Result$
END_SUB
' ------------------------------------------------------------------------------
SUB Lines()
    2D_LINE 30,174,221,174
    2D_LINE 240,174,431,174
    2D_LINE 450,174,641,174
    2D_LINE 660,174,851,174
    DISPLAY
    2D_LINE 30,224,433,224
    2D_LINE 448,224,853,224
    2D_LINE 30,274,853,274
    2D_LINE 30,159,30,174
    DISPLAY
    2D_LINE 220,159,220,174
    2D_LINE 240,159,240,174
    2D_LINE 430,159,430,174
    2D_LINE 450,159,450,174
    DISPLAY
    2D_LINE 640,159,640,174
    2D_LINE 660,159,660,174
    2D_LINE 850,159,850,174
    2D_LINE 30,209,30,224
    DISPLAY
    2D_LINE 432,209,432,224
    2D_LINE 448,209,448,224
    2D_LINE 852,209,852,224
    2D_LINE 30,259,30,274
    2D_LINE 852,259,852,274
    DISPLAY
END_SUB
' ------------------------------------------------------------------------------
Reset:
    i% = NUMBER_CLICK
    SELECT i%
        CASE 41
            FOR Bit%=1 to 8
                StateButton%(Bit%)=0
                CAPTION Bit%, 0
            NEXT Bit%
        CASE 42
            FOR Bit%=9 to 16
                StateButton%(Bit%)=0
                CAPTION Bit%, 0
            NEXT Bit%
        CASE 43
            FOR Bit%=17 to 24
                StateButton%(Bit%)=0
                CAPTION Bit%, 0
            NEXT Bit%
        CASE 44
            FOR Bit%=25 to 32
                StateButton%(Bit%)=0
                CAPTION Bit%, 0
            NEXT Bit%
    END_SELECT
    Lines()    
    Octet1Display()
    Octet2Display()
    Octet3Display()
    Octet4Display()
    Word1Display()
    Word2Display()
    DwordDisplay()
RETURN




EDIT : ajout de la notation hexadécimale.
2ème EDIT : modification de la numérotation des Bits : de 0 à 31


Dernière édition par Marc le Mar 28 Nov 2017 - 23:19, édité 10 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10411
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Convertisseur binaire vers décimal / Hexadécimal   Dim 26 Nov 2017 - 14:40

Oui, c'est smpa, ce petit utilitaire ! Bonne idée, et bonne présentation !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Convertisseur binaire vers décimal / Hexadécimal   Dim 26 Nov 2017 - 21:59

Evolution du programme :

J'ai ajouté le notation hexadécimale qui est très pratique pour manipuler des octets et des grands nombres.

Le premier post est mis à jour.

Les nombres hexadécimaux sont précédés de 0x. Il est très aisé de modifier dans le programme, ce 0x par &h ou h suivant vos désires.
Donc, sur une ligne, vous trouverez la valeur décimale suivie de la valeur hexadécimale, les deux séparés par un tiret et non pas un moins.

Quant au fonctionnement, je n'ai pas fait de mode d'emploi, mais si vous souhaitez une explication, ce sera avec plaisir.

Bonne soirée à tous !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10411
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Convertisseur binaire vers décimal / Hexadécimal   Dim 26 Nov 2017 - 23:09

Très bien, cet ajout de la représentatiion hexa !

Je constate une chose: tu interprètes les 32 bits comme un entier non signé, ainsi qu'au niveau des mots de 16 bits et des entiers courts de 8 bits. Mais on peut aussi les interpréter comme comme des entiers signés, le bit de poids le plus fort représentant le signe. C'est particulièrement significatif pour la représentation 32 bits. Fais l'essai: si tu actives tous les bits, tu obtiens un entier non signé de plus de 4 millards ce qui est juste, mais impossible à obtenir en Panoramic. Pour un entier signé de 32 bits, la valeur hexa 0xFFFFFFFF représente la valeur décimale -1 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Convertisseur binaire vers décimal / Hexadécimal   Lun 27 Nov 2017 - 0:02

Merci Klaus pour tes réponses.

Effectivement, en électronique, je ne travaille avec qu'avec des entiers non signés.
Quant au bit de poids fort, le 32ème, il me sert de bit d'alarme matériel : s'il passe à un, le programme passe en alarme et stop les machines.
Un simple test est effectué : si la valeur lue dépasse 0x7FFFFFFF, alors alarme ! Aucun calcul n'est fait ! Heureusement !

Tu as raison, je vais signaler que ce programme est pour des entiers non signés.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc



Nombre de messages : 582
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Convertisseur binaire vers décimal / Hexadécimal   Mar 28 Nov 2017 - 23:30

Sur une remarque de Klaus :

=> Adoption de la numérotation logique des bits en commençant de 0 jusqu'à 31.

Premier post mis à jour.

Merci Klaus !

Merci à tous les lecteurs.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Convertisseur binaire vers décimal / Hexadécimal   

Revenir en haut Aller en bas
 
Convertisseur binaire vers décimal / Hexadécimal
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Convertisseur Binaire
» Convertisseur date vers jour Julien et inversement
» Conversion Binaire-> hexadécimale et décimale -> hexadécimale
» Un adaptateur eSATA vers USB 3.0 intéressant
» conversion fichier word mac vers word PC

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: