开发者社区> 问答> 正文

将字节数组初始化为某个值,而不是默认的null吗?

我正忙着将用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]在构造函数中将数组设置为时,字节数组会自动初始化为默认的null值。没有办法让它在声明时变成所有空格,以便当我调用类的构造函数时立即像这样初始化它吗?还是一些memset类似的功能?

展开
收起
保持可爱mmm 2020-02-06 23:15:43 470 0
1 条回答
写回答
取消 提交回答
  • 对于小型数组,请使用数组初始化语法:

    var sevenItems = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }; 对于更大的阵列,请使用标准for循环。这是最易读,最有效的方法:

    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; }

    问题来源于stack overflow

    2020-02-06 23:16:02
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载