157 votes

Comment connaître la taille de la chaîne en octets ?

Je me demande si je peux savoir combien de temps en octets pour une string en C#, quelqu'un le sait ?

0 votes

Vérifiez cette réponse .

14 votes

Vous demandez combien de mémoire une string occupe, ou combien d'octets la représentation d'une chaîne de caractères occupera lorsqu'elle sera écrite dans un fichier ou envoyée sur un réseau (c'est-à-dire encodée), car ce sont deux questions complètement différentes. majidgeek a presque répondu à la première question, tandis que diya a répondu à la seconde (au moins pour deux encodages courants).

0 votes

Duplicata possible de combien d'octets faudra-t-il ?

183voto

diya Points 958

Vous pouvez utiliser un encodage tel que l'ASCII pour obtenir un caractère par octet en utilisant la fonction System.Text.Encoding classe.

ou essayez ceci

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);

20 votes

Question stupide, mais comment saurons-nous si nous devons utiliser la classe Unicode ou ASCII si les données de la chaîne proviennent d'un fichier tiers ?

8 votes

@MatthewLock Vous devriez utiliser l'UTF16 (ou la version de majidgeek Length * sizeof(Char) ce qui devrait donner le même résultat puisque chaque Char est UTF16/2-bytes) si vous voulez le même nombre d'octets que la représentation interne d'une chaîne. Si vous souhaitez connaître la quantité exacte de mémoire que l'objet entier occupe, plutôt que le nombre d'octets de son tableau de caractères interne, vous pouvez envisager l'utilisation de l'option méthode plus générale .

122voto

majidgeek Points 2781

De MSDN :

A String est une collection séquentielle de System.Char qui représentent une chaîne de caractères.

Donc vous pouvez utiliser ça :

var howManyBytes = yourString.Length * sizeof(Char);

0 votes

Dans la mesure où je peux comprendre les bases de la structure des données, c'est le choix le plus "piné" à comparer à

5 votes

N'oubliez pas de prendre en compte la taille du membre longueur. int howManyBytes = yourString.Length * sizeof(Char) + sizeof(int) ;

0 votes

Que se passe-t-il si la longueur de ma chaîne est supérieure à Int ?

29voto

System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

Ou

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);

12voto

ensisNoctis Points 879

Combien d'octets un string va prendre dépend de l'encodage que vous choisissez (ou est automatiquement choisi en arrière-plan à votre insu). Cet exemple de code montre la différence :

void Main()
{
    string text = "a";
    Console.WriteLine("{0,15} length: {1}", "String", text.Length);

    PrintInfo(text, Encoding.ASCII); // Note that '' cannot be encoded in ASCII, information loss will occur
    PrintInfo(text, Encoding.UTF8); // This should always be your choice nowadays
    PrintInfo(text, Encoding.Unicode);
    PrintInfo(text, Encoding.UTF32);
}

void PrintInfo(string input, Encoding encoding)
{
    byte[] bytes = encoding.GetBytes(input);

    var info = new StringBuilder();
    info.AppendFormat("{0,16} bytes: {1} (", encoding.EncodingName, bytes.Length);
    info.AppendJoin(' ', bytes);
    info.Append(')');

    string decodedString = encoding.GetString(bytes);
    info.AppendFormat(", decoded string: \"{0}\"", decodedString);

    Console.WriteLine(info.ToString());
}

Sortie :

         String length: 3
        US-ASCII bytes: 3 (97 63 63), decoded string: "a??"
 Unicode (UTF-8) bytes: 5 (97 240 159 161 170), decoded string: "a"
         Unicode bytes: 6 (97 0 62 216 106 220), decoded string: "a"
Unicode (UTF-32) bytes: 8 (97 0 0 0 106 248 1 0), decoded string: "a"

-3voto

Sebastian Points 17

À partir de .Net5, vous pouvez utiliser Convert.ToHexString . Il existe également une méthode pour l'opération inverse : Convert.FromHexString .

Prograide.com

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.

Powered by:

X