c# – 将字节数组初始化为某个值,而不是默认的null? [重复]

这个问题已经有一个答案在这里:            >            What is the equivalent of memset in C#?                                    11个答案                            对不起,如果这是一个重复的问题,但我在这里或网络上的其他地方找不到这个问题的答案。

我忙于重写一个在C中完成的旧项目,到C#。

我的任务是重写程序,使其功能尽可能接近原始。

在一堆文件处理过程中,编写此程序的以前的开发人员创建一个包含大量字段的结构,这些字段对应于文件必须写入的设置格式,所以所有的工作都已经完成了。

这些字段均为字节数组。 C代码做的是使用memset将整个结构设置为所有空格字符(0x20)。一行代码。简单。

这是非常重要的,因为这个文件最终去的实用程序是期望这种格式的文件。我不得不做的是将这个结构改为C#中的类,但我找不到一种方法来轻松地将这些字节数组初始化为所有空格字符。

我最后不得不做的是这个在类构造函数:

//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
    UserCode[index] = 0x20;
    index++;
}

这工作正常,但我敢肯定,必须有一个更简单的方法来做到这一点。当数组在构造函数中设置为UserCode = new byte [6]时,字节数组会自动初始化为默认的空值。有没有办法,我可以使它成为所有的空间声明,所以,当我调用我的类的构造函数,它是这样初始化?还是一些类似memset的函数?先谢谢你。

对于小数组,使用数组初始化语法:

var sevenItems = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };

对于较大的数组,使用循环的标准。这是最可读和最有效的方法:

var sevenThousandItems = new byte[7000];
for (int i = 0; i < sevenThousandItems.Length; i++)
{
    sevenThousandItems[i] = 0x20;
}

当然,如果你需要这么做,你可以创建一个帮助方法来帮助保持你的代码简洁:

byte[] sevenItems = CreateSpecialByteArray(7);
byte[] sevenThousandItems = CreateSpecialByteArray(7000);

// ...

public static byte[] CreateSpecialByteArray(int length)
{
    var arr = new byte[length];
    for (int i = 0; i < arr.Length; i++)
    {
        arr[i] = 0x20;
    }
    return arr;
}
http://stackoverflow.com/questions/6150097/initialize-a-byte-array-to-a-certain-value-other-than-the-default-null

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 将字节数组初始化为某个值,而不是默认的null? [重复]