Como saber o tamanho da string em bytes?

103

Estou me perguntando se posso saber quanto tempo em bytes para um stringem C #, alguém sabe?

user705414
fonte
Confira esta resposta .
dasblinkenlight
11
Você está perguntando quanta memória um stringobjeto ocupa, ou quantos bytes a representação de uma string ocupará quando escrita em um arquivo ou enviada por uma rede (ou seja, codificada), porque essas são duas questões completamente diferentes. majidgeek quase respondeu ao primeiro enquanto diya respondeu ao último (pelo menos para duas codificações comuns).
Allon Guralnek
possível duplicata de quantos bytes serão necessários?
nawfal
@AllonGuralnek: Bom ponto. você sabe por que diya abaixo não sugeriu usar System.Text.Encoding.Unicode.GetByteCount em vez disso? Por que parte do ASCIIEncoding?
giorgim,
@Giorgi: Como Unicodeé uma propriedade estática de System.Text.Encoding, que é a classe base de ASCIIEncoding, as duas instruções são realmente iguais. Você também pode acessar um membro estático de subclasses (mas não é considerado idiomático).
Allon Guralnek de

Respostas:

131

Você pode usar codificação como ASCII para obter um caractere por byte usando a System.Text.Encodingclasse.

ou tente isso

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);
diya
fonte
13
Pergunta estúpida, mas como saberemos se devemos usar a classe Unicode ou ASCII se os dados na string vieram de um arquivo de terceiros?
Matthew Lock
7
@MatthewLock Você deve usar UTF16 (ou majidgeek's Length * sizeof(Char), que deve dar o mesmo resultado, pois cada um Charé UTF16 / 2 bytes) se quiser o mesmo número de bytes que a representação interna de uma string. Se você realmente deseja a quantidade exata de memória que o objeto inteiro ocupa, em vez de apenas o número de bytes em sua matriz de caracteres interna, você pode considerar um método mais geral .
Bob
91

Do MSDN :

Um Stringobjeto é uma coleção sequencial de System.Charobjetos que representam uma string.

Então você pode usar isto:

var howManyBytes = yourString.Length * sizeof(Char);
Majid
fonte
tanto quanto eu posso entender noções básicas de estrutura de dados, é a escolha mais
difícil de
2
Não se esqueça de levar em consideração o tamanho do membro de comprimento. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int);
Zoltan Tirinda
E se o comprimento da minha string for maior do que Int?
Jurijs Kastanovs
Esta deve ser a resposta correta. Além disso, .Length é a quantidade de bytes que o servidor receberá se você enviar a mesma string. Isso é o que eu estava precisando.
DaWiseguy
24
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

Ou

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

fonte