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?



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


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

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

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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.