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


105

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



12
Demandez-vous combien de mémoire un stringobjet occupe, ou combien d'octets la représentation d'une chaîne occupera lorsqu'elle est é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 au premier tandis que diya a répondu au second (au moins pour deux encodages courants).
Allon Guralnek

duplication possible de combien d'octets prendra?
nawfal

@AllonGuralnek: Bon point. savez-vous pourquoi diya ci-dessous n'a pas suggéré d'utiliser System.Text.Encoding.Unicode.GetByteCount à la place? Pourquoi une partie ASCIIEncoding?
giorgim

@Giorgi: Puisque Unicodeest une propriété statique de System.Text.Encoding, qui est la classe de base de ASCIIEncoding, les deux instructions sont en fait identiques. Vous pouvez également accéder à un membre statique à partir de sous-classes (mais ce n'est pas considéré comme idiomatique).
Allon Guralnek

Réponses:


131

Vous pouvez utiliser un codage comme ASCII pour obtenir un caractère par octet en utilisant la System.Text.Encodingclasse.

ou essayez ceci

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

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

7
@MatthewLock Vous devriez utiliser UTF16 (ou majidgeek Length * sizeof(Char), qui devrait donner le même résultat puisque chacun Charest UTF16 / 2 octets) si vous voulez le même nombre d'octets que la représentation interne d'une chaîne. Si vous voulez réellement la quantité exacte de mémoire occupée par l'objet entier, plutôt que simplement le nombre d'octets dans son tableau de caractères interne, vous pouvez envisager une méthode plus générale .
Bob

91

Depuis MSDN :

UNE String objet est une collection séquentielle d' System.Charobjets qui représentent une chaîne.

Vous pouvez donc utiliser ceci:

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

pour autant que je puisse comprendre les bases de la structure de données, c'est le choix le plus `` piqué '' de comparer à
LoneXcoder

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

Que faire si ma longueur de chaîne est supérieure à Int?
Jurijs Kastanovs

Cela devrait être la bonne réponse. De plus, la longueur est la quantité d'octets que le serveur recevra si vous envoyez cette même chaîne. C'est ce dont j'avais besoin.
DaWiseguy

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

Ou

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.