Dizenin bayt cinsinden boyutunu nasıl bilebilirim?


106

Merak ediyorum, bir stringC # için bayt cinsinden ne kadar uzun olduğunu bilebilir miyim?



12
Bir stringnesnenin ne kadar bellek kapladığını veya bir dosyaya yazıldığında veya bir ağ üzerinden gönderildiğinde (yani kodlanmış) bir dizenin temsilinin kaç bayt kaplayacağını mı soruyorsunuz , çünkü bunlar tamamen farklı iki soru. majidgeek neredeyse ilkini, diya ikincisini yanıtladı (en azından iki ortak kodlama için).
Allon Guralnek


@AllonGuralnek: İyi nokta. Aşağıdaki diya'nın neden System.Text.Encoding.Unicode.GetByteCount'u kullanmayı önermediğini biliyor musunuz? Neden ASCIIEncoding parçası?
giorgim

@Giorgi: Temel sınıfı olan Unicodestatik özelliği System.Text.Encodingolduğundan ASCIIEncoding, her iki ifade de aslında aynıdır. Alt sınıflardan da statik bir üyeye erişebilirsiniz (ancak bu deyimsel olarak kabul edilmez).
Allon Guralnek

Yanıtlar:


132

System.Text.EncodingSınıfı kullanarak bayt başına bir karakter elde etmek için ASCII gibi kodlamayı kullanabilirsiniz .

veya bunu dene

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);

13
Aptalca bir soru, ancak dizedeki veriler 3. parti bir dosyadan geliyorsa Unicode mu yoksa ASCII sınıfını mı kullanacağımızı nasıl bileceğiz?
Matthew Lock

7
@MatthewLock Bir dizenin dahili gösterimi ile aynı sayıda bayt istiyorsanız UTF16 (veya majidgeek'ler Length * sizeof(Char), her Charbiri UTF16 / 2 bayt olduğu için aynı sonucu vermelidir ) kullanmalısınız. Yalnızca dahili karakter dizisindeki bayt sayısı yerine, tüm nesnenin aldığı bellek miktarını gerçekten istiyorsanız, daha genel bir yöntem düşünebilirsiniz .
Bob

92

Nereden MSDN :

Bir Stringnesne, System.Charbir dizeyi temsil eden nesnelerin sıralı bir koleksiyonudur .

Yani bunu kullanabilirsiniz:

var howManyBytes = yourString.Length * sizeof(Char);

Veri yapısının temellerini anlayabildiğim kadarıyla, karşılaştırmak için en 'sabitlenmiş' seçim
LoneXcoder

2
Üyenin uzunluğunu hesaba katmayı unutmayın. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int);
Zoltan Tirinda

String uzunluğum Int'den büyükse ne olur?
Jurijs Kastanovs

Bu doğru cevap olmalı. Ayrıca .Length, aynı dizeyi gönderirseniz sunucunun alacağı bayt miktarıdır. Bu ihtiyacım olan şeydi.
DaWiseguy

24
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

Veya

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.