0

私のコードは次のようになります

mem.WriteByte(4);
mem.WriteByte(1);
mem.Write(HostPortBuf, 0, 2);
//more

のように書けるでしょうか。

mem.MyWrite(4, 1, HostPortBuf, //more);

Mem は現在メモリストリームですが、配列を一度に簡単に構築できるので、ストリームである必要はありません。このようなことはありますか?C#で?

4

2 に答える 2

2

実際に読みやすいかどうかはわかりませんが、次のようになります。

public static class MemoryStreamExtensions
{
    public static void Write(this MemoryStream stream, params object[] parameters)
    {
        if (stream != null)
        {
            foreach (var obj in parameters)
            {
                if (obj is byte)
                {
                    stream.WriteByte((byte)obj);
                }
                else if (obj is byte[])
                {
                    var theArray = (byte[])obj;
                    stream.Write(theArray, 0, theArray.Length);
                }
            }
        }
    }
}

internal class Program
{
    private static void Main(string[] args)
    {
        MemoryStream zz = new MemoryStream();
        zz.Write((byte)1, (byte)4, new byte[] { 5, 6 });

        Console.ReadKey();
    }
}

1と4をとしてキャストすることを忘れないでくださいbyte。そうしないと、1と4のタイプがint(これらの数値のデフォルトのタイプ)になるため、ストリームに最初の2バイトが追加されません。

于 2012-07-11T09:11:35.223 に答える
0

現在のコードの方が読みやすいと思います。

それでも、これはおそらくあなたが探しているものです:

byte[] data = new byte[SIZE];
data[0] = 4;
data[1] = 1;
Array.Copy(HostPortBuf, 0, data, 2, HostPortBuf.Length);
mem.Write(data, 0, data.Length);
于 2012-07-11T09:05:35.037 に答える