2

に似たFCLのメソッドを探してEncoding.UTF8.GetString(bytes, index, count)いますが、引数を必要とせずcount、代わりに指定されたインデックスの文字列が null で終わると想定しています。

現在のソリューションを回答として投稿しています(以下を参照)が、誰かがよりエレガントまたはパフォーマンスの高いアプローチを知っているかどうかを知りたいです。

4

1 に答える 1

1

FCL で見つからなかったので、独自のメソッドを作成しました。

using System.Text;

string GetZeroTerminatedUTF8StringAt(byte[] bytes, int index)
{
    int zeroTerminatorIndex = Array.IndexOf<byte>(bytes, value: 0, startIndex: index);
    if (zeroTerminatorIndex >= index)
    {
        return Encoding.UTF8.GetString(bytes, index, count: zeroTerminatorIndex - index);
    }
    else
    {
        throw new ArgumentOutOfRangeException("index", "No zero-terminator found.");
    }
}

これは機能しますが、小さな問題が 1 つあります。UTF-8 エンコーディングで'\0'は、バイト以外の文字は含まれないと見なされます。これは実際に当てはまりますが、その仮定がクラス0内に完全にカプセル化されていれば、より良いでしょう。Encoding.UTF8

于 2013-02-24T13:24:22.693 に答える