Chr du VB en C [Résolu]

Signaler
Messages postés
52
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
7 décembre 2011
-
jerem3000
Messages postés
52
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
7 décembre 2011
-
Bonjour,

Ne connaissant pas le VB je galère un peu et je cherche à traduire cette petite ligne en C.

st = st & Chr("&H" & line.Substring(u, 2))


Est-ce que quelqu'un peut m'aider? Cela ne doit pas être trop compliquer mais mes recherche n'ont rien donner.


Merci d'avance

3 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
Ton navigateur peut interroger un moteur de recherche, par exemple avec "Substring" en motif.
C'est ce que je viens de faire puisque je n'ai jamais fait de DotNetteries.

On obtient:
Public Function Substring(startIndex As Integer, length As Integer) As String

Avec: char chaine[xxx]
J'en déduis que chaine.Substring(u, 2)
On prend 2 chars: chaine[u] et chaine[u + 1]

La fonction Chr() convertit un INT en char.
Si c'est un simple INT, inutile en C, c'est direct cette valeur qui est le char.
Dans ton cas, Chr("&H" & line.Substring(u, 2))
En fait, Chr() va convertir une chaine HEXA en char.

BYTE Hexa2CharToDecimal(BYTE a, BYTE b)
{
if((a >= '0') && (a <= '9')) a -= 48;
else if((a >= 'A') && (a <= 'F')) a -= 55;
else if((a >= 'a') && (a <= 'f')) a -= 87;
else return 0;
if((b >= '0') && (b <= '9')) b -= 48;
else if((b >= 'A') && (b <= 'F')) b -= 55;
else if((b >= 'a') && (b <= 'f')) b -= 87;
else return 0;
a *= 16;
a += b;
return a;
}

En espérant qu'il n'y aura pas trop de fautes de frappes plus haut:
char c = Chr("&H" & line.Substring(u, 2))
Fait ici:
char c = (char) Hexa2CharToDecimal((BYTE) chaine[u], (BYTE) chaine[u + 1]);

Devrait aller.

ciao...
BruNews, MVP VC++
Messages postés
52
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
7 décembre 2011

J’ai oublié de préciser.

Pour l'instant j'ai fais ça.

char chaine[6000]; 
char temp[6000];

/*   Je récupère des donnée d'un fichier dans "chaine" qui sont des numéro à convertir en caractère  2 par 2 */

for (int i = 0; i <= strlen(chaine); i += 2)
                {
 strncpy(temp, chaine + i, 2);
                 temp[u +2] = '\0';
         // temp contiens le nombre donc dans un char mais je cherche maintenant à le convertir.


                }
Messages postés
52
Date d'inscription
jeudi 23 avril 2009
Statut
Membre
Dernière intervention
7 décembre 2011

J'avais déjà essayer quelque choses dans le genre mais je n'avais pas pensé que c'étais de l'hexa.

Merci beaucoup BruNews cela fonctionne parfaitement.