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


106

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


Посмотрите этот ответ .
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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.