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).
@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.
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 .
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.
string
ditempati 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).Unicode
adalah properti statisSystem.Text.Encoding
, yang merupakan kelas dasarASCIIEncoding
, kedua pernyataan sebenarnya sama. Anda juga dapat mengakses anggota statis dari subkelas (tetapi tidak dianggap idiomatik).Jawaban:
Anda dapat menggunakan pengkodean seperti ASCII untuk mendapatkan karakter per byte dengan menggunakan
System.Text.Encoding
kelas.atau coba ini
sumber
Length * sizeof(Char)
, yang akan memberikan hasil yang sama karena masingChar
- 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 .Dari MSDN :
Jadi Anda bisa menggunakan ini:
sumber
Atau
sumber