Як дізнатися розмір рядка в байтах?


105

Мені цікаво, чи можу я знати, скільки часу в байтах для A stringв C #, хтось знає?



12
Ви запитуєте, скільки пам’яті stringзаймає об’єкт або скільки байтів буде займати представлення рядка, коли він записується у файл або надсилається по мережі (тобто закодовано), тому що це два абсолютно різних питання. majidgeek майже відповів на перший, тоді як diya відповів на другий (принаймні, на два загальних кодування).
Аллон Гуралнек

можливий дублікат кількості байтів?
nawfal

@AllonGuralnek: Добре. чи знаєте ви, чому дія нижче не запропонувала використовувати System.Text.Encoding.Unicode.GetByteCount? Чому частина ASCIIEncoding?
giorgim

@Giorgi: Оскільки Unicodeстатична властивість System.Text.Encoding, що є базовим класом ASCIIEncoding, обидва твердження насправді однакові. Ви також можете отримати доступ до статичного члена з підкласів (але це не вважається ідіоматичним).
Аллон Гуралнек

Відповіді:


131

Ви можете використовувати кодування типу ASCII, щоб отримати символ на байт, використовуючи System.Text.Encodingклас.

або спробуйте це

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

13
Дурне запитання, але як ми дізнаємось, чи слід використовувати клас Unicode або ASCII, якщо дані в рядку надходили з файлу сторонньої сторони?
Меттью Лок

7
@MatthewLock Ви повинні використовувати UTF16 (або majidgeek's Length * sizeof(Char), який повинен дати той самий результат, оскільки кожен Charє UTF16 / 2-байт), якщо ви бажаєте такої ж кількості байтів, як і внутрішнє представлення рядка. Якщо ви насправді хочете отримати точний об'єм пам'яті, який займає весь об'єкт, а не лише кількість байтів у його внутрішньому масиві символів, тоді ви можете розглянути більш загальний метод .
Боб

91

Від MSDN :

StringОб'єкт являє собою послідовний набір System.Charоб'єктів , які представляють рядок.

Отже, ви можете використовувати це:

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

наскільки я можу зрозуміти основи структури даних, це найрізноманітніший вибір для порівняння
LoneXcoder

2
Не забудьте врахувати розмір довжини елемента. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int);
Золтан Тірінда

Що робити, якщо довжина моєї струни більше, ніж Int?
Юрійс Кастанов

Це має бути правильна відповідь. Також .Length - це кількість байтів, які отримає сервер, якщо ви надішлете ту саму рядок. Це те, що мені було потрібно.
DaWiseguy

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

Або

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.