Jak poznać rozmiar ciągu w bajtach?

106

Zastanawiam się, czy mogę wiedzieć, jak długo w bajtach stringw języku C #, ktoś wie?

user705414
źródło
Sprawdź tę odpowiedź .
dasblinkenlight
12
Czy pytasz, ile pamięci stringzajmuje obiekt lub ile bajtów zajmie reprezentacja ciągu, gdy zostanie zapisana do pliku lub przesłana przez sieć (tj. Zakodowana), ponieważ są to dwa zupełnie różne pytania. majidgeek prawie odpowiedział na pierwsze, a diya na drugie (przynajmniej dla dwóch wspólnych kodowań).
Allon Guralnek
możliwy duplikat ile zajmie bajtów?
nawfal
@AllonGuralnek: Słuszna uwaga. czy wiesz, dlaczego diya poniżej nie zasugerowała użycia System.Text.Encoding.Unicode.GetByteCount? Dlaczego część ASCIIEncoding?
giorgim
@Giorgi: Ponieważ Unicodejest statyczną właściwością programu System.Text.Encoding, która jest klasą bazową ASCIIEncoding, obie instrukcje są w rzeczywistości takie same. Możesz również uzyskać dostęp do statycznego elementu członkowskiego z podklas (ale nie jest to uważane za idiomatyczne).
Allon Guralnek

Odpowiedzi:

132

Możesz użyć kodowania, takiego jak ASCII, aby uzyskać znak na bajt za pomocą System.Text.Encodingklasy.

lub spróbuj tego

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);
diya
źródło
13
Głupie pytanie, ale skąd będziemy wiedzieć, czy użyć klasy Unicode czy ASCII, jeśli dane w ciągu pochodzą z pliku strony trzeciej?
Matthew Lock
7
@MatthewLock Powinieneś użyć UTF16 (lub majidgeeka Length * sizeof(Char), który powinien dać ten sam wynik, ponieważ każdy Charma wartość UTF16 / 2-bajtowe), jeśli chcesz mieć taką samą liczbę bajtów, jak wewnętrzna reprezentacja łańcucha. Jeśli faktycznie chcesz mieć dokładną ilość pamięci, jaką zajmuje cały obiekt, a nie tylko liczbę bajtów w jego wewnętrznej tablicy znaków, możesz rozważyć bardziej ogólną metodę .
Bob
92

Z MSDN :

StringObiekt jest sekwencyjny zbiór System.Charobiektów, które reprezentują ciąg.

Możesz więc użyć tego:

var howManyBytes = yourString.Length * sizeof(Char);
Majid
źródło
o ile rozumiem podstawy struktury danych, jest to najbardziej `` wyrafinowany '' wybór do porównania
LoneXcoder
2
Nie zapomnij wziąć pod uwagę rozmiaru członka długości. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int);
Zoltan Tirinda
Co zrobić, jeśli długość mojego ciągu jest większa niż Int?
Jurijs Kastanovs
To powinna być poprawna odpowiedź. Ponadto .Długość to liczba bajtów, które serwer otrzyma, jeśli wyślesz ten sam ciąg. To jest to, czego potrzebowałem.
DaWiseguy
24
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

Lub

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

źródło