Jak poznać rozmiar ciągu w bajtach?


106

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



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);

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);

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);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.