Convertion int en char [Résolu]

Signaler
Messages postés
172
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2011
-
Messages postés
172
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2011
-
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

Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
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
Messages postés
172
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2011

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
Messages postés
172
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2011

Bonjour,

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

CedKat