Chr du VB en C

Résolu
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011 - 6 déc. 2011 à 16:34
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011 - 7 déc. 2011 à 21:49
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 déc. 2011 à 22:10
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++
3
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
6 déc. 2011 à 16:53
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.


                }
0
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
7 déc. 2011 à 21:49
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.
0
Rejoignez-nous