2

長さが 10 文字の .NET 文字列は何ビットですか? (.NET 文字列は UTF-16 ですよね?)

4

4 に答える 4

7

32 ビット システムの場合:

4 bytes          = Type pointer (Every object has one of these)
4 bytes          = Lock         (One of these too!)
4 bytes          = Length       (Need the length)
2 * Length bytes = Data         (And the chars themselves)
=======================
12 + 2*Length bytes
=======================
96 + 16*Length bits

したがって、10 文字 = 256 ビット= 32 バイト

Lock が 64 ビット システムで 64 ビットに拡張されるかどうかはわかりません。私はちょっと願っていませんが、あなたは決して知りません。したがって、64 ビット構造のオーバーヘッドは、16 ~ 20 バイトの範囲になります (32 ビットの 12 バイトとは対照的に)。

于 2009-11-11T05:53:29.217 に答える
4

文字列内のすべての文字のサイズは 2 バイトであるため、特定のエンコーディングを使用せずに文字を直接変換する場合、答えは string.Length * 2 * 8 になります。

それ以外の場合、結果はエンコーディングに依存します。次のように記述できます。

int numbits = System.Text.Encoding.UTF8.GetByteCount(str)*8; //returns 80

また

int numbits = System.Text.Encoding.Unicode.GetByteCount(str)*8 //returns 160
于 2009-11-11T05:54:27.763 に答える
1

純粋な Unicode-16 について話している場合は、次のようになります。

10 文字 = 20 バイト = 160 ビット

これには、適切に回答するためにコンテキストが必要です。

于 2009-11-11T05:50:15.740 に答える
0

すべては、文字を定義する方法とデータを保存する方法にかかっています。

たとえば、ユーザーの観点から文字を 1 文字として定義する場合、2 バイトを超える可能性があります。たとえば、この文字: Å は 2 つの Unicode コード ポイント (U+0041 U+030A、ラテン大文字 A + 結合リング) です。上記) したがって、2 つの .net char または 4 バイトの int UTF-16 が必要になります。

10 個の .net Char 要素について話している場合でも、それがメモリ内にある場合よりも、オブジェクト オーバーヘッド (既に述べた) と少しのアライメント オーバーヘッド (32 ビット システムでは、すべてを 64 ビットで 4 バイト境界にアライメントする必要があります) があります。ルールはより複雑です) そのため、最後に空のバイトがいくつかある場合があります。

データベースまたはファイルについて話している場合、各データベースおよびファイル システムには独自のオーバーヘッドがあります。

于 2009-11-11T15:38:43.807 に答える