質問

たいと思い入れる文字列をbyte配列の文字列が大きすぎます。る場合であっても大きたいと思い入れのどれにも当てはまらない文字列では配列の型になります。が効率的にどのように多くのキャラクターズ?

役に立ちましたか?

解決

るために切り詰めに文字列をUTF-8バイト配列を分割せずに文字を使っています:

static string Truncate(string s, int maxLength) {
    if (Encoding.UTF8.GetByteCount(s) <= maxLength)
        return s;
    var cs = s.ToCharArray();
    int length = 0;
    int i = 0;
    while (i < cs.Length){
        int charSize = 1;
        if (i < (cs.Length - 1) && char.IsSurrogate(cs[i]))
            charSize = 2;
        int byteSize = Encoding.UTF8.GetByteCount(cs, i, charSize);
        if ((byteSize + length) <= maxLength){
            i = i + charSize;
            length += byteSize;
        }
        else
            break;
    }
    return s.Substring(0, i);
}

返される文字列ができる安全に転送バイト配列の長さmaxLength.

他のヒント

使用のエンコードクさせるための変換バイト配列は正確ですか?すべてのエンコードオブジェクトには、オーバーライド方式GetMaxCharCount、ま"の最大文字数を作読することにより指定された数のバイトです。" 対応することができるでしょうこの値を使用パンフレット、ホームページをごstring適切にコード化します。

効率ようとしてるようには見えないのですか(pessimistically)バイトが必要となりまキャラクターと

Encoding.GetMaxByteCount(1);

その後に分割文字列のサイズの結果、変換したい文字

public virtual int Encoding.GetBytes (
 string s,
 int charIndex,
 int charCount,
 byte[] bytes,
 int byteIndex
)

を利用する場合は以下のメモリ使用

Encoding.GetByteCount(string);

が遅い方法です。

のエンコードのクラスです。純ていることにな GetByteCount ることのできる文字列またはchar[].合格は1文字かど多くのバイトが必要である1文字のいずれかエンコードされています。

の方法 GetMaxByteCount では迅速な最悪の場合の計算が返すより高い数値が実際に必要です。

Cookey、コードしないか明らかと考えます。事前に割り当てていたbyteバッファの場合は純粋な廃棄物で使用されません。なお課題落に割り当てられたメモリをリセットの arr 参照ポイント別のバッファーで Encoding.GetBytes 新たに追加された配列の型になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top