Подтвердить что ты не робот

Размер char типа С#

Просто интересно, почему у нас есть < char 'тип size = 2Bytes в С# (. net) в отличие от 1Byte на других языках программирования?

4b9b3361

Ответ 1

A char является unicode в С#, поэтому число возможных символов превышает 255. Таким образом, вам понадобятся два байта.

Расширенный ASCII, например, имеет набор 255- char и поэтому может храниться в одном байте. Это также целая цель пространства имен System.Encoding, так как разные системы могут иметь разные кодировки и размеры char. Поэтому С# может обрабатывать один/четыре/и т.д. char, но Unicode UTF-16 по умолчанию.

Ответ 2

Я предполагаю, что с "другими языками программирования" вы подразумеваете, что C. C имеет на самом деле два разных типа char: char и wchar_t. char может быть длиной в один байт, wchar_t не обязательно.

В С# (и .NET), в любом случае, все символьные строки кодируются как Unicode в UTF-16. Таким образом, char в .NET представляет собой единый модуль кода UTF-16, который может быть точкой кода или половиной суррогатной пары (а не фактически символом).

Ответ 3

Фактически С#, или, более точно, CLR, размер char соответствует большинству других управляемых языков. Управляемые языки, такие как Java, имеют тенденцию быть более новыми и имеют элементы, такие как поддержка Unicode, встроенная с нуля. Естественным расширением поддерживающих строк unicode является unicode char.

Более старые языки, такие как C/С++, запускались только в ASCII и только позже добавили поддержку юникода.

Ответ 4

Поскольку символ в строке С# по умолчанию соответствует кодировке Unicode UTF-16, которая по умолчанию равна 2 байтам.

Ответ 5

Поскольку строки в .NET кодируются как 2 байтовые символы Unicode.

Ответ 6

С# с использованием 16-битовой ширины символов, вероятно, имеет больше общего с производительностью, чем с чем-либо еще.

Во-первых, если вы используете UTF-8, вы можете поместить каждого персонажа в "правильное" пространство. Это связано с тем, что UTF-8 является переменной шириной. Символы ASCII будут использовать 8 бит, в то время как более крупные символы будут использовать больше.

Но кодирование символов переменной длины поощряет сложность алгоритма O (n) в общих сценариях. Например. Получение символа в определенном месте в строке. По этому поводу были проведены публичные дискуссии. Но самое простое решение - продолжить использование ширины символов, которая подходит для большей части вашей кодировки, обрезая остальные. Теперь у вас есть фиксированная ширина символа.

Строго говоря, UTF-16 также является кодировкой с переменной шириной, поэтому С# (и Java в этом отношении) используют что-то гибридное, поскольку их ширина символов никогда не составляет 32 бита.