文字列のサイズをバイトで知る方法は?


103

私はstringC#でのバイト数をどれだけ知ることができるのか疑問に思っていますか?


この回答を確認してください。
dasblinkenlight 2012年

11
stringオブジェクトが占有するメモリの量、またはファイルに書き込まれたとき、またはネットワーク経由で送信されたとき(つまりエンコードされたとき)の文字列の表現が占めるバイト数は、2つのまったく異なる質問であるためです。majidgeekは前者にほとんど答えましたが、diyaは後者に答えました(少なくとも2つの一般的なエンコーディングでは)。
Allon Guralnek 2013年


@AllonGuralnek:良い点。以下のdiyaが代わりにSystem.Text.Encoding.Unicode.GetByteCountの使用を推奨しなかった理由を知っていますか?なぜASCIIEncodingパーツなのですか?
giorgim

@Giorgi:は、の基本クラスでUnicodeあるの静的プロパティであるため、両方のステートメントは実際には同じです。サブクラスから静的メンバーにアクセスすることもできます(ただし、慣用的とは見なされません)。System.Text.EncodingASCIIEncoding
Allon Guralnek、2015年

回答:


131

System.Text.Encodingクラスを使用すると、ASCIIのようなエンコーディングを使用して、バイトあたりの文字を取得できます。

またはこれを試してください

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);

13
馬鹿げた質問ですが、文字列のデータがサードパーティのファイルからのものである場合、Unicodeクラスを使用するかASCIIクラスを使用するかをどのようにして知るのでしょうか。
マシューロック14

7
@MatthewLock 文字列の内部表現と同じバイト数が必要な場合は、UTF16(またはmajidgeek'sを使用する必要がありますLength * sizeof(Char)。これはそれぞれCharがUTF16 / 2バイトであるため同じ結果になります)。内部文字配列のバイト数だけでなく、オブジェクト全体で使用する正確なメモリ量が実際に必要な場合は、より一般的な方法を検討してください
ボブ

91

MSDNから:

Stringオブジェクトは、シーケンシャルの集まりであるSystem.Char文字列を表すオブジェクト。

だからあなたはこれを使うことができます:

var howManyBytes = yourString.Length * sizeof(Char);

データ構造の基本を理解できる限り、比較するのが最も「固定された」選択です
LoneXcoder

2
長さメンバーのサイズを考慮することを忘れないでください。int howManyBytes = yourString.Length * sizeof(Char)+ sizeof(int);
Zoltan Tirinda、2015年

文字列の長さがIntより大きい場合はどうなりますか?
Jurijs Kastanovs 2017年

これは正解です。また、.Lengthは、同じ文字列を送信した場合にサーバーが受信するバイト数です。これは私が必要としていたものです。
DaWiseguy

24
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

または

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.