3

Ascii 文字列をバイト配列にコピーしようとしていますが、できません。どのように?


これまでに試した2つのことは次のとおりです。どちらも機能しません:

public int GetString (ref byte[] buffer, int buflen)
{
    string mystring = "hello world";

    // I have tried this:
    System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
    buffer = encoding.GetBytes(mystring);

    // and tried this:
    System.Buffer.BlockCopy(mystring.ToCharArray(), 0, buffer, 0, buflen);  
   return (buflen);
}
4

3 に答える 3

5

バッファーが十分に大きい場合は、直接書き込むことができます。

encoding.GetBytes(mystring, 0, mystring.Length, buffer, 0)

ただし、最初に長さを確認する必要がある場合があります。テストは次のようになります。

if(encoding.GetMaxByteCount(mystring.length) <= buflen // cheapest first
   || encoding.GetByteCount(mystring) <= buflen)
{
    return encoding.GetBytes(mystring, 0, mystring.Length, buffer, 0)
}
else
{
    buffer = encoding.GetBytes(mystring);
    return buffer.Length;
}

その後、あなたはすでに気絶しているので、何もすることはありません。個人的には、これは悪い選択だと思います。スクラッチ バッファからコピーする場合を除き、ここでは必要ありません。bufferrefrefBlockCopy

var tmp = encoding.GetBytes(mystring);
// copy as much as we can from tmp to buffer
Buffer.BlockCopy(tmp, 0, buffer, 0, buflen);
return buflen;
于 2012-07-18T10:49:23.463 に答える