Bagaimana cara mengetahui ukuran string dalam byte?

105

Saya bertanya-tanya apakah saya bisa tahu berapa lama dalam byte untuk a stringdi C #, ada yang tahu?

pengguna705414
sumber
Lihat jawaban ini .
dasblinkenlight
12
Apakah Anda bertanya berapa banyak memori yang stringditempati suatu objek, atau berapa banyak byte yang akan ditempati representasi string ketika ditulis ke file atau dikirim melalui jaringan (yaitu dikodekan), karena itu adalah dua pertanyaan yang sama sekali berbeda. majidgeek hampir menjawab yang pertama sementara diya menjawab yang terakhir (setidaknya untuk dua penyandian umum).
Allon Guralnek
kemungkinan duplikat dari berapa banyak byte yang akan dibutuhkan?
nawfal
@AllonGuralnek: Poin bagus. tahukah Anda mengapa diya di bawah ini tidak menyarankan untuk menggunakan System.Text.Encoding.Unicode.GetByteCount sebagai gantinya? Mengapa bagian ASCIIEncoding?
giorgim
@ Giorgi: Karena Unicodeadalah properti statis System.Text.Encoding, yang merupakan kelas dasar ASCIIEncoding, kedua pernyataan sebenarnya sama. Anda juga dapat mengakses anggota statis dari subkelas (tetapi tidak dianggap idiomatik).
Allon Guralnek

Jawaban:

131

Anda dapat menggunakan pengkodean seperti ASCII untuk mendapatkan karakter per byte dengan menggunakan System.Text.Encodingkelas.

atau coba ini

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);
diya
sumber
13
Pertanyaan bodoh, tetapi bagaimana kita tahu apakah akan menggunakan kelas Unicode atau ASCII jika data dalam string berasal dari file pihak ketiga?
Matthew Lock
7
@MatthewLock Anda harus menggunakan UTF16 (atau majidgeek Length * sizeof(Char), yang akan memberikan hasil yang sama karena masing Char- masing adalah UTF16 / 2-byte) jika Anda menginginkan jumlah byte yang sama dengan representasi internal sebuah string. Jika Anda benar-benar menginginkan jumlah memori yang tepat yang dibutuhkan seluruh objek, bukan hanya jumlah byte dalam larik karakter internalnya, maka Anda dapat mempertimbangkan metode yang lebih umum .
Bob
91

Dari MSDN :

Sebuah Stringobjek adalah kumpulan berurutan dari System.Charbenda-benda yang mewakili string.

Jadi Anda bisa menggunakan ini:

var howManyBytes = yourString.Length * sizeof(Char);
Majid
sumber
Sejauh yang saya bisa memahami dasar-dasar struktur data, itu adalah pilihan yang paling 'disematkan' untuk dibandingkan
LoneXcoder
2
Jangan lupa memperhitungkan ukuran panjang member. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int);
Zoltan Tirinda
Bagaimana jika panjang String saya lebih besar dari Int?
Jurijs Kastanovs
Ini seharusnya jawaban yang benar. Juga .Length adalah jumlah byte yang akan diterima server jika Anda mengirim string yang sama. Inilah yang saya butuhkan.
DaWiseguy
24
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

Atau

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

sumber