Convertion int en char

Résolu
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011 - 19 sept. 2006 à 16:56
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011 - 20 sept. 2006 à 13:32
Bonjour,

Je doit réecrire une portion de code qui consiste à crypter un fichier text ecrit à l'origine c++.
En applicant le même code, je n'arrive pas au même résultat.

Voici le code en c++ :
for (unsigned i = 0; i < str->size(); i++)
        {
            int t = (*str)[i];
            t += _Offset;
            t %= 256;
            (*str)[i] = (char)t;
        }

que j'ai traduit comme ca :

for (int i = 0; i < line.Length; i++)
          {
            int j = (int)line[i];
            j += OFFSET;
            j %= 256;
            newline += (char)j;
          }

ce qui pse problème c'est : newline += (char)j qui n'utilise pas le meme jeu de caractère en c# qu'en c++.
ex, la lettre ! devient en c++ oe collé alors qu'elle devient un carré en c# avec un offset de 123.

Quelqu'un aurait'il une solution ?

Merci

CedKat

3 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
19 sept. 2006 à 17:44
a priori cette différence est due au fait que ton char est en iso latin en C++ alors qu'il est unicode en C#.
au lieu de lire ton fichier sous forme de string, lit le sous forme de tableau d'octets pour éviter la conversion du code numérique de tes caractères. Ainsi tu récupère non pas le caractère mais le code iso latin.
sinon, au lieu de lire directement le fichier sous forme d'octets, modifie ton code ainsi :
byte[] MaStringSousFormeDoctets = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(line);

et au lieu de travailler sur line, tu travaille sur MaStringSousFormeDoctets...ca devrait fonctionner a priori
3
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011
20 sept. 2006 à 09:14
Bonjour,

ça ne change rien, mais après avoir pousser les tests, ce qui me parrait bizarre, c'est qu'il n'y a que quelques caracetères qui ne passe pas comme le '!' par exemple. les autre caractères sont bien codé en ascii étendue comme le 'a' qui devient bien u majuscule avec tréma.

Comment expliquer cela ?

Merci encore

CedKat
0
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011
20 sept. 2006 à 13:32
Bonjour,

J'ai trouvé. Merci leprov. il fallait aussi mettre le type d'encoder au moment de l'écriture sur le disque.

CedKat
0