Conversion hexa bin str

cs_jm30 Messages postés 10 Date d'inscription dimanche 21 décembre 2003 Statut Membre Dernière intervention 9 avril 2012 - 16 mars 2008 à 16:04
cs_jm30 Messages postés 10 Date d'inscription dimanche 21 décembre 2003 Statut Membre Dernière intervention 9 avril 2012 - 24 mars 2008 à 14:53
bonjour a tous,
voila mon pb : dans une appli je lis un fichier en binaire,
aprés conversion en hexadecimal, tout serait ok si les octets contenant un numéro de telephone ne soient inversés :
06 20 30 40 50 se retrouve en 60 02 03 04 05 ....
la fonction qui convertit le bin en hexa :

function Bin2HexExt(const input:string; const spaces, upcase: boolean): string;
var
   loop      : integer;
   hexresult : string;


   begin
     hexresult := '';


     for loop := 1 to Length(input) do
        begin
        hexresult := hexresult + IntToHex(Ord(input[loop]),2);


        if spaces then hexresult := hexresult + ' ';
        end;


     if upcase then result := AnsiUpperCase(hexresult)
               else result := AnsiLowerCase(hexresult);




end;
Celle qui convertit de l hexa en string :

function Hex2Str(const input:string; const spaces, upcase: boolean): string;
var
   loop      : integer;
   hexresult : string;
   strresult :string;
   begin
     hexresult := '';


     for loop := 1 to Length(input) do
        begin
        hexresult := hexresult + char(input[loop]) ;




        if spaces then hexresult := hexresult + ' ';
        end;


     if upcase then result := AnsiUpperCase(hexresult)
               else result := AnsiLowerCase(hexresult);




end;
cette derniere fonctionne  ok pour la partie alpha du fichier.
En 2 mots existe-t-il une routine pour inverser un octet ( de 09 vers 90 par exemple ) dans une chaine hexa ?
merci à l avance de vos réponses , j avoue que je coince !!!!!

jm30

5 réponses

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
17 mars 2008 à 09:17
"06 20 30 40 50 se retrouve en 60 02 03 04 05 ...."



heu deja ca fera plutot 06 14 1E 28 32 vue que tu convertit en hexa !
pourquoi ne pas utiliser un simple inttostr?
ou alors, si tu veux garder sur 2 chiffres, un format('%.2d', [Ord(input[loop])]);
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
17 mars 2008 à 14:03
attention a la terminologie :

bin to hex = 01101101 >  6D

hex to str = 6D > '6D'

<hr size="2" width="100%" />
http://deefaze.gnomz.com
0
cs_jm30 Messages postés 10 Date d'inscription dimanche 21 décembre 2003 Statut Membre Dernière intervention 9 avril 2012
17 mars 2008 à 19:23
merci de vos réponses,Guillemouze et f0xi :
mais j ai du mal expliqué mon pb : en effet la conversion avec Hextostr est correcte (exemples : $41 - > 'A', $45 -> 'E') mais c est le binaire du fichier
qui est à l origine du pb : 09 devient '90'...35 -> '53' etc...
le fichier en question est celui d'une carte SIM (repertoire téléphonique),
pour ceux qui connaissent c'est le EF_ADN précisément.
en fait je crains qu il ne s agisse d'octets codés en 7 bits, voire d autres codage (et non en 8 bits classiques)et là , je ne sais pas créer pour le moment de routine pour convertir
Si quequ un a une idée merci d avance !
0
cs_jm30 Messages postés 10 Date d'inscription dimanche 21 décembre 2003 Statut Membre Dernière intervention 9 avril 2012
22 mars 2008 à 13:40
voilà, j ai trouvé la solution :

function convhexa(const input:string; const spaces, upcase: boolean): string;
var
loop : integer;
hexresult : string;

begin
hexresult := '';

for loop := 1 to length(input) do
begin
hexresult := hexresult + reversestring(IntToHex(Ord(input[loop]),2));// là on inverse les caractéres de l hexa..
end;


if spaces then hexresult := hexresult + ' ';// espace rajouté suivant paramétre donné à la fonction


if upcase then result := AnsiUpperCase(hexresult) //majuscules ou minuscules suivant paramétre donné à la fonction
else result := AnsiLowerCase(hexresult);

end;
end;

j ai testé et cela fonctionne, merci des conseils à tous
cordialement,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jm30 Messages postés 10 Date d'inscription dimanche 21 décembre 2003 Statut Membre Dernière intervention 9 avril 2012
24 mars 2008 à 14:53
bonjour, c est encore moi !
autre pb à vous soumettre : comment décoder des caactéres codés en 7 bits (au lieu des 8 classiques ) :
en effet je cherche, dans le cadre d'une petite appli destinée à lire des sms sur une carte sim, comment lire des caractéres codés en 7 bits (avec du pdu ).
je pense que la question est connue, il existe des sources en c++, vb.net mais en delphi j'ai rien trouvé pour m aider.
je penses qu 'il doit falloir utiliser shl ou shr dans une fonction qui lit bit à bit ?
merci de vos coups de main, qui m'eviteront l'abus d aspirine, hi !
0
Rejoignez-nous