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/num ... ascii.html
Merci.
Hex to ASCII text converter
(sans sujet)
Salut,
Je ne sais pas si c'est ce que tu cherches à faire mais j'ai trouvé ça :
https://itknowledgeexchange.techtarget. ... decimal-2/
Florian
Je ne sais pas si c'est ce que tu cherches à faire mais j'ai trouvé ça :
https://itknowledgeexchange.techtarget. ... decimal-2/
Florian
(sans sujet)
Bonjour
voici l'équivalent en 5250 (je pense)
DSPF
voici l'équivalent en 5250 (je pense)
DSPF
Code : Tout sélectionner
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'
(sans sujet)
Le programme
Cdlt
Code : Tout sélectionner
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;