Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修改使用binarywriter写入的内存流中的一小部分字节_C#_Bytearray_Memorystream_Binarywriter - Fatal编程技术网

C# 如何修改使用binarywriter写入的内存流中的一小部分字节

C# 如何修改使用binarywriter写入的内存流中的一小部分字节,c#,bytearray,memorystream,binarywriter,C#,Bytearray,Memorystream,Binarywriter,如何编辑内存流中的前四个字节?假设下面代码中的“bytes”只有100个字节长。我需要写一个占位符,比如4字节的值0,然后返回并将这些字节更新为新值 static MemoryStream stream = new MemoryStream(); static BinaryWriter writer = new BinaryWriter(stream); writer.Write(bytes); 这个解决方案怎么样: static void UpdateNthLong(MemoryStrea

如何编辑内存流中的前四个字节?假设下面代码中的“bytes”只有100个字节长。我需要写一个占位符,比如4字节的值0,然后返回并将这些字节更新为新值

static MemoryStream stream = new MemoryStream();
static BinaryWriter writer = new BinaryWriter(stream);

writer.Write(bytes);

这个解决方案怎么样:

static void UpdateNthLong(MemoryStream ms, long idx, long newValue)
{
    var currPos = ms.Position;
    try
    {
        var offset = sizeof(long) * idx;
        ms.Position = offset;
        var bw = new BinaryWriter(ms);
        bw.Write(newValue);
    }
    finally { ms.Position = currPos; }
}
static void ShowByteArray(byte[] array)
{
    Console.WriteLine("Size: {0}", array.Length);
    for(int i = 0; i < array.Length; i++)
    {
        Console.WriteLine("{0} => {1}", i, array[i]);
    }
}
static void Main(string[] args)
{
    using (var ms = new MemoryStream())
    {
        var bw = new BinaryWriter(ms);
        bw.Write(1L); // 0-th
        bw.Write(2L); // 1-th
        bw.Write(3L); // 2-th
        bw.Write(4L); // 3-th
        var bytes = ms.ToArray();

        Console.WriteLine("Before update:");
        ShowByteArray(bytes);
        // Update 0-th
        UpdateNthLong(ms, 0, 0xFFFFFFFFFFFFFF);
        // Update 3-th
        UpdateNthLong(ms, 3, 0xBBBBBBBBBBBBBBB);

        bytes = ms.ToArray();
        Console.WriteLine("After update:");
        ShowByteArray(bytes);
    }
}
static void UpdateNthLong(MemoryStream ms、long idx、long newValue)
{
var currPos=ms位置;
尝试
{
var偏移=sizeof(长)*idx;
ms.位置=偏移量;
var bw=新的二进制编写器(ms);
写入(newValue);
}
最后{ms.Position=currPos;}
}
静态无效ShowByteArray(字节[]数组)
{
WriteLine(“大小:{0}”,array.Length);
for(int i=0;i{1}”,i,数组[i]);
}
}
静态void Main(字符串[]参数)
{
使用(var ms=new MemoryStream())
{
var bw=新的二进制编写器(ms);
写入(1L);//第0位
写(2L);//第1个
写(3L);//第2位
写入(4L);//第3次
var bytes=ms.ToArray();
Console.WriteLine(“更新前:”);
ShowByteArray(字节);
//第0次更新
UpdateNthLong(ms,0,0xffffffffffff);
//第三次更新
更新长度(ms,3,0xbbbbb);
字节=ms.ToArray();
Console.WriteLine(“更新后:”);
ShowByteArray(字节);
}
}