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?

user705414
la source
Découvrez cette réponse .
dasblinkenlight
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);
diya
la source
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);
Majid
la source
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);

la source