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).
@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.
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 .
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.
string
objeto 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).Unicode
é uma propriedade estática deSystem.Text.Encoding
, que é a classe base deASCIIEncoding
, 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).Respostas:
Você pode usar codificação como ASCII para obter um caractere por byte usando a
System.Text.Encoding
classe.ou tente isso
fonte
Length * sizeof(Char)
, que deve dar o mesmo resultado, pois cada umChar
é 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 .Do MSDN :
Então você pode usar isto:
fonte
Ou
fonte