Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

HOW TO CONVERT STRING * 16 (ASCII coded HEXADECIMAL) TO DECIMAL NUMBER?



  1. #1
    gibault

    HOW TO CONVERT STRING * 16 (ASCII coded HEXADECIMAL) TO DECIMAL NUMBER?


    ------

    Bonjour,

    Actuellement, je dispose d'une 1ère réalisation électronique comprenant un CB405 et un module de lecture RFID.

    Le but consiste à réceptionner une donnée d'identification électronique ASCII codé HEXADECIMAL, de type STRING * 16 depuis le RS232.

    Puis cette donnée doit être convertie en DECIMAL.

    La réception de données est maîtrisée sauf le traitement de conversion de données.

    Le problème majeur s'agit de la longueur de donnée ASCII qui est de 10 caractères (STRING) pour une valeur HEX max = 4000000000 donc DEC max = 274877906944.

    Or le CB405 peut traiter une variable LONG dans la limite de 2147483647.

    Valeur max. Donnée Identification = 274877906944
    Valeur max. variable CUBLOC = 2147483647

    Après maintes modifications de programmation au niveau des conversions, je ne trouve pas le moyen de convertir une donnée ASCII (STRING) en donnée DEC (LONG ou autre type).
    Le programme ci-après ne fonctionne pas, probablement dû à la mauvaise sélection du type de variable.

    En effet, je souhaiterais obtenir votre précieuse aide d'analyser et de corriger le programme ci-dessous:

    '============================= ============================== ============================== ==================
    Const Device = CB405

    Out 10,1 '|
    Out 11,1 '|
    Out 12,1 '| Configuration du module de lecture RFID
    Out 13,0 '|
    Out 14,1 '|

    Dim transponder As String * 16
    Dim convert(10) As Byte
    Dim a As Byte
    Dim i As Byte
    Dim resultat As Long
    Opencom 1,9600,3,30,16
    Delay 500
    Bclr 1,2
    Delay 2500

    On Recv1 Gosub GETRFID
    Set Until 1,16,10

    Do
    Loop

    GETRFID:
    If Blen(1,0) > 0 Then ' Si buffer présente sur COM1
    a=Blen(1,0)
    transponder=Right(Getstr(1,a), 10) ' Recuperer les 10 dernieres caracteres de la chaîne
    Debug "ASCII:",transponder,Cr
    For i= 0 To 9
    If Dec(Asc(transponder_A(10-i)))<65 Then 'Si ASCII de rang(10-i) situé entre 0 et 9 alors
    convert(i)=(Dec(Asc(transponde r_A(10-i))))-48 'conversion ASCII en DEC
    Else
    convert(i)=(Dec(Asc(transponde r_A(10-i))))-55 'conversion ASCII en DEC si ASCII de rang(10-i) entre A et F
    Endif
    resultat=resultat+((convert(i) *16^i))
    Next
    Debug "DEC:",Dp((transponder),12,1), Cr
    End If
    Return

    end
    '============================= ============================== ============================== ==================

    D'avance, je vous remercie infiniment de votre disponibilité de consulter ce message et éventuellement proposer votre résolution de mon problème.

    -----

  2. Publicité
  3. #2
    freepicbasic

    Re : HOW TO CONVERT STRING * 16 (ASCII coded HEXADECIMAL) TO DECIMAL NUMBER?

    ASC donne une valeur , pourquoi faire un DEC() en plus ...
    je créé une variable J en plus.
    Et je suprime le dec(i)

    D'ailleurs s'agit il (le dec() ) d 'un tableau ou d'une procédure ?

    Code:
    resultat=0
    For i= 0 To 9
      resultat=resultat * 16
      j = Asc(transponder_A(10-i))
      If j<65 Then 
        j = j -48 
      Else
        j = j -55 
      Endif
      resultat=resultat+j
    Next
    A+, pat

  4. #3
    freepicbasic

    Re : HOW TO CONVERT STRING * 16 (ASCII coded HEXADECIMAL) TO DECIMAL NUMBER?

    si A(0) est le poid fort et A(9) le poid faible comme cela devrait.
    alors faire plutôt A(i) au lieu de A(10 - i)
    Code:
    resultat=0
    For i= 0 To 9
      resultat=resultat * 16
      j = Asc(transponder_A(i))
      If j<65 Then 
        j = j -48 
      Else
        j = j -55 
      Endif
      resultat=resultat+j
    Next
    A+, pat

  5. #4
    freepicbasic

    Re : HOW TO CONVERT STRING * 16 (ASCII coded HEXADECIMAL) TO DECIMAL NUMBER?

    Un long est fait de 32 bits à priori , car cela dépend du compilateur ou interpréteur.
    Alors vérifier la taille du long utilisé !

    Donc une multiplication par 16 , équivaux à un décalage de 4 , soit dix fois dans ton exemple , on a besoin de 40 bits.
    Ou alors on limite à 32 bits soit 8 chiffres hexa.
    A+, pat

  6. A voir en vidéo sur Futura

Discussions similaires

  1. convertion (decimal-hexadecimal)
    Par TaRiKq dans le forum Électronique
    Réponses: 1
    Dernier message: 29/02/2008, 22h57
  2. un site de convert trés parfait!!
    Par simohamed_chat dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 27/04/2007, 01h54
  3. conversion hexadecimal
    Par anthonyfff dans le forum Électronique
    Réponses: 4
    Dernier message: 07/10/2006, 13h59
  4. ascii to décimal
    Par KHEOPS1982 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 30/05/2006, 22h35
  5. Asm-> Hexadecimal
    Par acx01b dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 24/01/2005, 21h13
Découvrez nos comparatifs produits sur l'informatique et les technologies.