cs_cedkat
Messages postés172Date d'inscriptionmardi 7 janvier 2003StatutMembreDernière intervention 3 juin 2011
-
19 sept. 2006 à 16:56
cs_cedkat
Messages postés172Date d'inscriptionmardi 7 janvier 2003StatutMembreDerniè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.
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 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
cs_cedkat
Messages postés172Date d'inscriptionmardi 7 janvier 2003StatutMembreDerniè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.