J'ai une chaîne de caractères que je dois convertir en un tableau d'octets équivalent en .NET.
Cela devrait être facile, mais j'ai une crampe au cerveau.
J'ai une chaîne de caractères que je dois convertir en un tableau d'octets équivalent en .NET.
Cela devrait être facile, mais j'ai une crampe au cerveau.
Vous devez utiliser un encodage ( System.Text.Encoding
) pour indiquer à .NET ce que vous attendez comme résultat. Par exemple, dans UTF-16 (= System.Text.Encoding.Unicode
) :
var result = System.Text.Encoding.Unicode.GetBytes(text);
Il y a beaucoup plus d'encodages dans System.Text.Encoding que le seul Unicode : assurez-vous de comprendre celui dont vous avez besoin.
Joel : C'est pourquoi j'ai écrit "par exemple" ;-) Mais votre remarque est bien sûr valable.
:) J'essaie de montrer où se trouvent les encodages non-UTF16 - j'aurais probablement pu mieux le formuler.
Déterminez d'abord l'encodage que vous souhaitez : vous devez connaître Un peu d'Unicode d'abord.
Déterminez ensuite quel System.Text.Encoding
qui correspond à. Mon Core .NET refcard décrit les plus courants et explique comment en obtenir une instance (par exemple, par une propriété statique de Encoding
ou en appelant un Encoding.GetEncoding
.
Enfin, déterminez si vous voulez tous les octets en même temps (ce qui est la façon la plus simple de travailler - appelez Encoding.GetBytes(string) une seule fois et le tour est joué) ou si vous avez besoin de le découper en morceaux - dans ce cas, vous devez utiliser la fonction Encoding.GetEncoder puis encoder un bit à la fois. L'encodeur se charge de conserver l'état entre les appels, au cas où vous devriez vous interrompre au milieu d'un caractère, par exemple.
@JonSkeet : Vous n'avez pas vraiment besoin de l'encodage à moins que vous (ou quelqu'un d'autre) n'alliez réellement interpréter les octets, n'est-ce pas ? Pour des tâches telles que la compression, le cryptage, l'obscurcissement, etc., l'encodage semble peu pertinent... aucune raison de se donner du mal si ce n'est pas nécessaire...
@Mehrdad : Vous absolument faire. Un encodage définit ce que fait la conversion d'une chaîne de caractères en un tableau d'octets. La compression et le cryptage sont deux choses totalement différentes. Sinon, c'est comme dire que le format de l'image n'a pas d'importance lorsque vous voulez enregistrer une image sous forme de fichier. un impliqué, par définition.
@JonSkeet : Vous ne pouvez pas dire byte[] bytes = new byte[str.Length * sizeof(char)]; Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length)
? Qui se soucie de l'encodage (ou même de savoir si la chaîne a des caractères valides), tant que vous savez que vous pouvez la récupérer sous la même forme en faisant l'inverse ?
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.