Как узнать размер строки в байтах?

106

Мне интересно, могу ли я узнать, сколько байтов для stringC #, кто-нибудь знает?

user705414
источник
Посмотрите этот ответ .
dasblinkenlight 03
12
Вы спрашиваете, сколько памяти stringзанимает объект или сколько байтов будет занимать представление строки при записи в файл или отправке по сети (т. Е. При кодировании), потому что это два совершенно разных вопроса. Маджиджик почти ответил на первое, а дийа ответил на второе (по крайней мере, для двух распространенных кодировок).
Аллон Гуралнек
возможный дубликат сколько байтов займет?
nawfal
@AllonGuralnek: Хороший вопрос. знаете ли вы, почему дия ниже не предлагала вместо этого использовать System.Text.Encoding.Unicode.GetByteCount? Почему именно ASCIIEncoding?
giorgim
@Giorgi: Поскольку Unicodeэто статическое свойство System.Text.Encoding, которое является базовым классом ASCIIEncoding, оба оператора фактически одинаковы. Вы также можете получить доступ к статическому члену из подклассов (но это не считается идиоматическим).
Аллон Гуралнек

Ответы:

132

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

или попробуйте это

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);
дия
источник
13
Глупый вопрос, но как мы узнаем, использовать ли класс Unicode или ASCII, если данные в строке пришли из стороннего файла?
Мэтью Лок,
7
@MatthewLock Вы должны использовать UTF16 (или majidgeek Length * sizeof(Char), который должен дать тот же результат, поскольку каждый из них Charимеет размер UTF16 / 2 байта), если вы хотите такое же количество байтов, что и внутреннее представление строки. Если вам действительно нужен точный объем памяти, который занимает весь объект, а не просто количество байтов в его внутреннем массиве символов, вы можете рассмотреть более общий метод .
Боб
92

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

источник