Volubis, le forum IBM i Index du Forum Volubis, le forum IBM i
avec les clubs Informatiques IPL et Bretagne.
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Hex to ASCII text converter

 
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> langages
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
fbillard



Inscrit le: 16 Avr 2007
Messages: 12

MessagePosté le: Mer 20 Mar 2019, 12:00:47    Sujet du message: Hex to ASCII text converter Répondre en citant

Bonjour,

Je suis a la recherche d'une solution (RPG, SQL, ...) pour convertir ma chaîne hexadécimal en ASCII.
Exemple : 3930303031373638 (Hex) --> 90001768 (ASCII)

Au même titre que cette page WEB
https://www.rapidtables.com/convert/number/hex-to-ascii.html

Merci.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
florian67



Inscrit le: 23 Déc 2013
Messages: 114

MessagePosté le: Mer 20 Mar 2019, 12:05:10    Sujet du message: (sans sujet) Répondre en citant

Salut,

Je ne sais pas si c'est ce que tu cherches à faire mais j'ai trouvé ça :
https://itknowledgeexchange.techtarget.com/itanswers/rpg-ile-character-hex-value-to-decimal-2/

Florian
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
monthi



Inscrit le: 11 Sep 2018
Messages: 37

MessagePosté le: Jeu 21 Mar 2019, 16:15:39    Sujet du message: (sans sujet) Répondre en citant

Bonjour

voici l'équivalent en 5250 (je pense)

DSPF
Code:

     A                                      DSPSIZ(27 132 *DS4                 -
     A                                             24 80 *DS3)
     A                                      CA03
     A                                      CA10
     A          R F01
    A                                  1 53'Hex to ASCII text converter'
     A                                  3  2'Hex input'
     A            HEXA        1200A  B  3 12DSPATR(HI)
     A                                      DSPATR(UL)
     A  60                                  ERRMSG('La chaîne hexa n''est pas u-
     A                                      n multiple de 2' 60)
     A                                 14  2'ASCII Text output'
     A            ASCII       1200A  O 15 12DSPATR(UL)
     A                                 26 12'Enter=Convert'
     A                                 26 32'F3=Exit'
     A                                 26 44'F10=Swap'
     A          R F01B
    A                                  1 53'ASCII to Hex text converter'
     A                                  3  2'Ascii input'
     A            ASCII2       600A  B  3 14DSPATR(HI)
     A                                      DSPATR(UL)
     A                                      CHECK(LC)
     A                                 10  2'Hex output'
     A            HEXA2       1800   O 10 14
     A                                 26 12'Enter=Convert'
     A                                 26 32'F3=Exit'
     A                                 26 44'F10=Swap'         
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
monthi



Inscrit le: 11 Sep 2018
Messages: 37

MessagePosté le: Jeu 21 Mar 2019, 16:16:02    Sujet du message: (sans sujet) Répondre en citant

Le programme
Code:

       ctl-opt actgrp(*caller);

       dcl-f AFFASCIIF workstn;

       dcl-s Hexval char(16) INZ('0123456789ABCDEF'); // car hexa valide
       dcl-s sens char(1) inz('H');

       dcl-pr Cvthc  extproc('cvthc');
         *n pointer value;
         *n pointer value;
         *n int(10) value;
       End-Pr;


       dow 1=1;
         if sens='H';
           exfmt F01;
         else;
           exfmt F01B;
         endif;
         if *inkc;
           leave;
         elseif *inkJ; // swap;
           if Sens='H';
             sens='A';
           else;
             sens='H';
           EndIf;
           iter;
         EndIf;

         if sens='H';
           convHex2ascii();
         else;
           convAscii2hex();
         endif;
       EndDo;

       *inlr=*on;
       //***************************************************************
       // Conversion Hex vers AScii

       dcl-proc convHex2ascii;

         dcl-s tmp varchar(600);
         dcl-s hex char(2) based(ptr);
         dcl-s car char(1) based(ptr);
         dcl-s tmphex varchar(1200);
         dcl-s ptr_end pointer;

         // suppression des espaces éventuels entre les caractère hex
         tmphex=%scanrpl(' ':'':hexa);

         *in60= %rem(%len(tmphex):2)<>0;
         if *in60;
           //pas un multiple de 2
           return;
         EndIf;

         // code hex en maj
         tmphex=%xlate('abcdef':'ABCDEF':tmphex);
         ptr=%addr(tmphex:*data);
         ptr_end=ptr+%len(tmphex);

         dow ptr<ptr_end;
           tmp+=cvthexa(hex);
           ptr+=2;
         EndDo;

         ascii=cvtascii('A2E':tmp);
         //pour affichage ecran 5250 on replace les caratère < X'40' (espace)
         // par X'40'

         ptr=%addr(ascii);
         ptr_end=ptr+%len(tmp);
         dow ptr<ptr_end;
           if car<X'40';
             car=X'40';
           EndIf;
           ptr+=1;
         EndDo;


       End-Proc;
       //***************************************************************
       // Conversion AScii vers hex

       dcl-proc convAscii2hex;

         dcl-s tmp varchar(600);
         dcl-s car char(1) based(ptr);
         dcl-s car2 char(2);
         dcl-s tmphex varchar(1200);
         dcl-s ptr_end pointer;

         // suppression des espaces éventuels entre les caractère hex
         tmp=cvtascii('E2A':%trim(ascii2));


         ptr=%addr(tmp:*data);
         ptr_end=ptr+%len(tmp);

         dow ptr<ptr_end;
           cvthc(%addr(car2):ptr:2);
           if tmphex<>'';
             tmphex+=' ';
           EndIf;
           tmphex+=car2;
           ptr+=1;
         EndDo;

         hexa2=tmphex;
       End-Proc;

       //*****************************************************************************
       //**valeur Hexa‚
       dcl-Proc cvthexa;

         Dcl-pi *n char(1);
           VALHEXX char(2) const;
         end-pi;

         Dcl-ds bin$;
           BIN1 uns(3);
         end-ds;


         BIN1 = ((%scan(%subst(valhexx:1:1):Hexval)-1)*16) +
         (%scan(%subst(valhexx:2:1):Hexval)-1);
         RETURN BIN$;
       //
       end-proc;
       //*************************************************************************************
       dcl-Proc cvtAscii;

         dcl-pi *n varchar(600);
           Sens char(3) const;
           Ebcdic varchar(1200) value;
         end-pi;

         dcl-s ptrin  pointer;
         Dcl-s p_Bufout  pointer;
         Dcl-s BufInsize uns(10);
         Dcl-s BufOutsize uns(10);
         Dcl-s rc uns(10);
         Dcl-s bufout  char(600);
         dcl-s car char(1) based(ptr_car);

         Dcl-ds ToAscii;
           ICORV_A  bindec(9);
           ICOC_A   bindec(9) DIM(00012);
         end-ds;
         //
         Dcl-ds dsFROM;
           from_ccsid int(10) Inz(819);
           from_ca int(10) Inz(0);
           from_Sa int(10) Inz(0);
           from_ss int(10) Inz(1);
           from_il int(10) Inz(0);
           from_E0 int(10) Inz(1);
           from_r  char(8) INZ(*allx'00');
         end-ds;

         dcl-ds dsTO;
           To_ccsid int(10) inz(0);
           To_ca int(10) Inz(0);
           To_Sa int(10) Inz(0);
           To_ss int(10) Inz(1);
           To_il int(10) Inz(0);
           To_E0 int(10) Inz(1);
           To_r  char(8) INZ(*allx'00');
         end-ds;

         Dcl-pr IConvOpen   char(52)   ExtProc('QtqIconvOpen');
           *n pointer  Value options(*string); //            To Code
           *n pointer Value options(*string); //Fr Code
         end-pr;

         Dcl-pr IConv int(10) ExtProc('iconv');
           *n Char(52) Value; // Code Discripter
           *n pointer  value; // ptr to InBuffer Ptr
           *n uns(10); // inSize ptr
           *n pointer value; // ptr to OutBuffer Pt
           *n uns(10); // OutSize ptr
         end-pr;

         Dcl-pr IConvClose  int(10)  ExtProc('iconv_close');
           *n char(52) Value;
         end-pr;

         if sens='A2E';
           from_ccsid=819;
           To_ccsid=0;
         else;
           from_ccsid=0;
           To_ccsid=819;
         EndIf;

         ToAscii=IConvOpen(%addr(dsTo):%addr(dsFROM));
         ptrin=%addr(Ebcdic:*data);
         bufInsize=%len(Ebcdic);
         bufout='';
         BufOutsize=%size(bufout);
         p_bufout=%addr(bufout);
         rc=iconv(ToAscii:%addr(ptrin):bufinsize:%addr(p_bufout):bufOutsize);
         iconvclose(ToAscii);

         return %subst(bufout:1:%size(bufout)-bufOutsize);
       end-proc;

 


Cdlt
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> langages Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com

Anti Bot Question MOD - phpBB MOD against Spam Bots