C#在二进制文件中替换HEX

我有一个二进制文件,其中有几个值应该更改。 更确切地说,在文件的两个部分,在开头,有两个HEX值

66 73 69 6D 35 2E 36 39 

应该改变什么

 4D 53 57 49 4E 34 2E 31 

我怎么能这样异步,尽可能快? 我已经到了将整个文件读入byte []数组的地步,但是这个类没有搜索或替换function。

这是我编写的一个方法,您可以使用它来查找byte[]中您要查找的字节。

 ///  /// Searches the current array for a specified subarray and returns the index /// of the first occurrence, or -1 if not found. ///  /// Array in which to search for the /// subarray. /// Subarray to search for. /// Index in  at which /// to start searching. /// Maximum length of the source array to search. /// The greatest index that can be returned is this minus the length of /// . public static int IndexOfSubarray(this T[] sourceArray, T[] findWhat, int startIndex, int sourceLength) where T : IEquatable { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (findWhat == null) throw new ArgumentNullException("findWhat"); if (startIndex < 0 || startIndex > sourceArray.Length) throw new ArgumentOutOfRangeException(); var maxIndex = sourceLength - findWhat.Length; for (int i = startIndex; i <= maxIndex; i++) { if (sourceArray.SubarrayEquals(i, findWhat, 0, findWhat.Length)) return i; } return -1; } /// Determines whether the two arrays contain the same content in the /// specified location. public static bool SubarrayEquals(this T[] sourceArray, int sourceStartIndex, T[] otherArray, int otherStartIndex, int length) where T : IEquatable { if (sourceArray == null) throw new ArgumentNullException("sourceArray"); if (otherArray == null) throw new ArgumentNullException("otherArray"); if (sourceStartIndex < 0 || length < 0 || otherStartIndex < 0 || sourceStartIndex + length > sourceArray.Length || otherStartIndex + length > otherArray.Length) throw new ArgumentOutOfRangeException(); for (int i = 0; i < length; i++) { if (!sourceArray[sourceStartIndex + i] .Equals(otherArray[otherStartIndex + i])) return false; } return true; }