用随机字节填充列表

5

我想通过随机字节填充缓冲区。缓冲区被定义为字节列表,这是我想要保留的内容。以下是定义:

namespace NameofProject
{
    public partial class Form1 : Form
    {
    List<byte> buff = new List<byte>();
    }

}

我的第一个尝试是:

public static void RandomFillBuffer()
{
   Random rnd = new Random();
   rnd.NextBytes(buff);
}

对于buff,这会导致一个错误: 非静态字段、方法或属性“Form1.buff”要求对象引用。

然后我只是删除了“static”这个词(我不确定这是否正确),它变成了“public void RandomFillBuffer()”,但是这次我在buff上遇到了这个错误: 参数1:无法将类型为“System.Collections.Generic.List”的对象隐式转换为类型“byte[]”

如果有意义的话,我将感激任何帮助来解决这两个错误。


1
恭喜您成为第一批正确发布帖子的人之一! - itsme86
3个回答

5
您遇到这个问题是因为NextBytes()方法需要一个数组,但您试图传递一个List<>。解决这个问题的一种方法是将您的List<>更改为一个数组:
byte[] buff = new byte[someSize];

您需要确定someSize应该是多少(由您决定)。没有大小,就无法填充内容。否则,如何知道什么时候完成呢?


3
您遇到的问题是NextBytes填充了一个数组[]而不是列表。您需要定义一个大小为其索引的数组。
    // Put random bytes into this array.
    byte[] array = new byte[8];
    // Fill array with random bytes.
    Random random = new Random();
    random.NextBytes(array);

1
首先,您尝试将方法static(这意味着该方法与对象的实例无关,而是与对象的类相关),并尝试引用非静态成员(您的buff不是static,因此与特定实例相关联,在您的情况下是特定的Form)。 其次,您尝试使用Random.NextBytes(System.Byte[]),但提供了System.Collections.Generics.List<System.Byte>作为参数。
下面的代码应该适用于您(此代码假定至少buff已经具有一些数据,因此具有正长度):
var generator = new Random();
var array = new Byte[buff.Count]; // create a local array of the same size as your list
generator.NextBytes(array); // fill the array with random bytes
buff = array.ToList(); // copy array to a new list and let field "buff" reference this freshly created list

请注意,此代码并不是最优的,因为它复制了一个数组。但我猜它可以做到你想要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接