【发布时间】:2019-04-21 05:16:52
【问题描述】:
我如何搜索指定的字节数组并将从开头的所有内容替换为该字节数组(包含)
基本上我有我的模式要找到
byte[] find = { 0x00, 0x48, 0x00 };
和
byte[] ddsHeaderDXT1 = { 0x44, 0x44, 0x53, 0x20, 0x7C, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x56, 0x54, 0x54, 0x06, 0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 };
我想做的是搜索我的find 数组,一旦找到,选择从文件开头到包含的find 数组的所有字节,并将所有这些替换为我的ddsHeaderDXT1 数组。
文件可能很大,但模式总是在开头(少于 500 个首字节),并不总是在相同的偏移量处,并且只能找到一次。
我已经尝试过 rene 的代码here,但它什么也没做。 我也从 OpenFileDialog 获取我的文件并读取它的字节
byte[] src = File.ReadAllBytes(ofdFilePath);
【问题讨论】:
-
"我已经在这里尝试了 rene 的代码,但它什么也没做"。我怀疑它没有做任何事情。您到底尝试了哪些方法,为什么没有按照您的预期进行?
-
如果你想从头替换所有东西并且
ddsHeaderDXT1比找到的位置短,你期望会发生什么? -
@elgonzo 我试过
ReplaceBytes(src, find, ddsHeaderDXT1);,它只是没有更改我的文件,但没有错误,也许我做错了什么。 @OlivierJacot-Descombes 然后我只想插入并增加文件大小¯_(ツ)_/¯ -
我的意思是,
ddsHeaderDXT1的长度为 110。如果您在位置 400 找到模式,则可以用它填充索引 0 .. 109 处的字节。你打算用什么来填充字节 110 .. 399? -
@OlivierJacot-Descombes 然后我只想删除其余部分