Nous avons récemment rencontré un exemple de code d'un fournisseur pour le hachage d'une clé secrète pour un appel de service Web, leur exemple était dans VB.NET que nous avons converti en C#. Cela a provoqué le hachage à produire une entrée différente. Il s'avère que la façon dont ils généraient la clé pour le cryptage était en convertissant un tableau char en une chaîne et retour à un tableau d'octets. Cela m'a conduit à la découverte que VB.NET et le codeur par défaut de C# fonctionnent différemment avec certains caractères.Pourquoi Encoding.Default.GetBytes() renvoie des résultats différents dans VB.NET et C#?
C#:
Console.Write(Encoding.Default.GetBytes(new char[] { (char)149 })[0]);
VB:
Dim b As Char() = {Chr(149)}
Console.WriteLine(Encoding.Default.GetBytes(b)(0))
La sortie C# est 63, alors que VB est la valeur de l'octet correct de 149. si vous utilisez une autre valeur, comme 145, etc. , la sortie correspond.
En passant par le débogage, l'encodeur par défaut VB et C# est SBCSCodePageEncoding.
Est-ce que quelqu'un sait pourquoi c'est?
J'ai corrigé l'exemple de code en initialisant directement un tableau d'octets, ce qu'il aurait dû être en premier lieu, mais je veux toujours savoir pourquoi l'encodeur, qui ne devrait pas être spécifique au langage, semble être juste cela.
Voici un lien vers la documentation: http://msdn.microsoft .com/fr-us/library/613dxh46 (VS.80) .aspx –
Bravo Jon- J'étais juste en train d'ajouter un lien. – RichardOD
Merci! Je pensais que cela avait quelque chose à voir avec le bit Chr(), mais je ne savais pas comment éviter d'utiliser Chr() dans VB.NET. – Annagram