2008-10-11 11 views
2

J'ai un appel C dll non géré depuis une bibliothèque de classes C# qui crypte une valeur de chaîne en une chaîne cryptée contenant des caractères non-ascii. Je dois prendre les données et écrire ses valeurs binaires dans un fichier, mais C# traite le texte comme string plutôt que comme byte[].Chaîne cryptée C++ non gérée en octets C# [

La valeur cryptée contient généralement des caractères spéciaux (\r, \O, etc.). Lorsque je convertis la chaîne retournée en C# en utilisant un type de jeu de codes (ascii, utf-7, utf-16), elle écrit les valeurs de caractères spéciaux comme les valeurs interprétées de Windows au lieu de leur représentation binaire réelle.

Ma question est de savoir comment puis-je tirer les données de la DLL non managée dans un byte[] plutôt que d'une chaîne de caractères afin que je puisse écrire cela en utilisant le fichier BinaryWriter?

Merci.

+0

(Je veux dire la chaîne d'origine) –

Répondre

2

Si je vous comprends bien, je pense que vous voulez Encoding.GetBytes() probablement avec UTF8?

2

Avez-vous essayé d'utiliser la classe ASCIIEncoding? Il devrait transformer tout caractère UTF-8 en caractère ascii pour '?'

MSDN Page

Utilisation

ASCIIEncoding ascii = new ASCIIEncoding(); 
Byte[] encodedBytes = ascii.GetBytes(unicodeString); 
0

Utilisez-vous P/Invoke? Hmm ... Peut-être que la spécification [MarshalAs (UnmanagedType. *)] Aiderait. En outre, vous pouvez créer une fonction C intermédiaire qui expose les données cryptées en tant que (void *). Cela devrait être plus facile d'entrer dans un byte []. Savez-vous quel type de chaîne est et quel est le codage?

Questions connexes