web-dev-qa-db-ja.com

C#の文字型のサイズ

他のプログラミング言語の1バイトとは異なり、C#(.NET)では2バイトサイズのcharタイプがあるのはなぜですか。

38

CharはC#のユニコードであるため、可能な文字数は255を超えます。したがって、2バイトが必要になります。

拡張ASCIIたとえば、255文字のセットがあるため、1バイトに格納できます。これは、System.Encoding名前空間の目的でもあります。システムによって異なる場合があるためです。文字セット、および文字サイズC#は1/4などの文字バイトを処理できますが、Unicode UTF-16がデフォルトです。

36
Jan Jongboom

「その他のプログラミング言語」と推測していますが、これはCを意味します。Cには実際にはcharタイプが2つあります:charwchar_tcharは1バイトの長さ、wchar_t 必ずしも。

C#(および.NET)では、すべての文字列はUTF-16でUnicodeとしてエンコードされます。 .NETのcharが単一のUTF-16 コード単位を表すのはそのためですコードポイントまたはサロゲートペアの半分(実際には文字、その後)。

25
Joey

実際、C#、より正確にはCLRのcharのサイズは、他のほとんどのマネージ言語と一致しています。 Javaのような管理された言語は、新しくなる傾向があり、Unicodeサポートのようなアイテムが最初から組み込まれています。ユニコード文字列をサポートする自然な拡張は、ユニコード文字を持つことです。

C/C++のような古い言語はASCIIのみで始まり、後になって初めてUnicodeサポートが追加されました。

3
JaredPar

C#文字列の文字のデフォルトは、UnicodeのUTF-16エンコーディングであり、これは2バイトです(デフォルト)。

1
Bob Moore

16ビットの文字幅を使用するC#は、おそらく他の何よりもパフォーマンスと関係があります。

まず、UTF-8を使用する場合、「適切な」量のスペースにすべての文字を収めることができます。これは、UTF-8が可変幅であるためです。 ASCII文字は8ビットを使用しますが、大きな文字は8ビットを使用します。

しかし、可変長文字エンコーディングは、一般的なシナリオでO(n)アルゴリズムの複雑さを助長します。例えば。文字列内の特定の場所にある文字を取得します。この点については、公開討論が行われています。しかし、最も簡単な解決策は、ほとんどの文字セットに適合する文字幅を使い続け、他の文字を切り捨てることです。これで文字幅が固定されました。

厳密に言えば、UTF-16も可変幅エンコーディングであるため、C#(およびJavaそのことについては))は文字幅が32ビットになることはないため、ハイブリッドのようなものを使用しています。

0
kervin

.NETの文字列は2バイトのUnicode文字としてエンコードされているためです。

0
Dawid Ohia