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


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.