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?



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


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

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

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);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.