【发布时间】:2011-10-08 16:31:49
【问题描述】:
我正在处理一个包含文本消息的字节数组,但消息中的一些字符是控制字符(即小于 0x20),我想用解码时人类可读的字符序列替换它们转换成 ASCII(例如 0x0F 将显示 [TAB] 而不是实际上是一个制表符)。所以在我看来,我有三个选择:
- 将整个内容解码为 ASCII 字符串,然后使用
String.Replace()换出我想要的内容。这样做的问题是字符似乎只是被解码为不可打印的框字符或问号,从而丢失了它们的实际字节值。 - 遍历字节数组以查找我的任何控制字符并执行数组插入操作(创建更大的新数组、复制现有片段、写入新片段)。
- 使用
Array.ToList<byte>()将字节数组转换为List,然后使用IEnumerable.SelectMany()将控制字符转换为可读字符序列,然后SelectMany将为我变平。
所以问题是,就效率而言,哪个是最佳选择?我对IEnumerable lambda 操作的性能影响并没有很好的感觉。我相信选项 1 在功能上不可行,但我可能是错的。
【问题讨论】:
标签: c# arrays lambda performance ienumerable