0

この質問は、この質問のフォローアップです

byte[]のようにa を埋めるための小さなメソッドを書きましたMemoryStream:

public static Stream FillWithPadding(Stream MS, int Count)
{
    byte[] buffer = new byte[64];
    for (int i = 0; i < buffer.Length; i++)
    {
        buffer[i] = 0xFF;
    }
    while (Count > buffer.Length)
    {
        MS.Write(buffer, 0, buffer.Length);
        Count -= buffer.Length;
    }
    MS.Write(buffer, 0, Count);
    return MS;
}

public static byte[] FillWithPadding(byte[] Buffer, int Count)
{
    using (MemoryStream MS = new MemoryStream())
    {
        MS.Write(Buffer, 0, Buffer.Length);
        MemoryStream msw = FillWithPadding(MS, Count) as MemoryStream;
        return msw.GetBuffer();
    }
}

このコードは機能しません!!

代わりに、最後に0xFF+を作成しています!0x00

誰でもクリアしてください、なぜこれがうまくいかないのですか??

4

2 に答える 2

4

MemoryStream.GetBuffer()MemoryStream がデータを格納するために使用する内部バイト配列を返します。最初は 0 で埋められ、Write によってストリームの長さまで埋められます。

ほとんどの場合、代わりに MemoryStream.ToArray() を使用して、実際の長さに切り捨てられたバッファーのコピーを返します。

于 2012-05-22T02:29:43.757 に答える
0

それがStream Nowでの位置です。書き込みの前に MS.Position = 0 を使用します。

public static Stream FillWithPadding(Stream MS, int Count)
{
    byte[] buffer = new byte[64];
    for (int i = 0; i < buffer.Length; i++)
    {
        buffer[i] = 0xFF;
    }
    MS.Position = 0;
    while (Count > buffer.Length)
    {
        MS.Write(buffer, 0, buffer.Length);
        Count -= buffer.Length;
    }
    MS.Write(buffer, 0, Count);
    return MS;
}
于 2012-05-22T02:51:32.073 に答える