我正在处理一个包含文本消息的字节数组,但是消息中的一些字符是控制字符(即小于0x20),我想用解码时人类可读的字符序列替换它们到ASCII(例如0x0F
将显示[TAB]
而不是实际上是制表符。所以我看到它,我有三个选择:
String.Replace()
换出我想要的内容。这个问题是,字符似乎只是被解码为不可打印的盒子字符或问号,从而失去了它们的实际字节值。Array.ToList<byte>()
将字节数组转换为List
,然后使用IEnumerable.SelectMany()
将控制字符转换为可读字符序列,SelectMany
然后将其展平对我来说。所以问题是,哪个是效率方面的最佳选择?我对IEnumerable
lambda操作的性能影响并没有很好的感觉。我认为选项1在功能上是不可行的,但我可能是错的。
答案 0 :(得分:0)
尝试
// your byte array for the message
byte[] TheMessage = ...;
// a string representation of your message (the character 0x01... 0x32 are NOT altered)
string MessageString = Encoding.ASCII.GetString(TheMessage);
// replace whatever you want...
MessageString = MessageString.Replace (" ", "x").Replace ( "\n", " " )...
// the replaced message back as byte array
byte[] TheReplacedMessage= Encoding.ASCII.GetBytes(MessageString.ToCharArray());
编辑:
替换8位字节值的示例
MessageString = MessageString.Replace ( Encoding.ASCII.GetString (new byte[] {0xF7}), " " )...
关于表现 我不是100%肯定它是否是最快的方法...我们只是尝试了几种方法虽然我们的要求是在原始字节数组中替换“1-n字节的字节数组”...这就出现了紧固件+我们的用例最简洁(1 MB - 1 GB文件)。