我想检查两个二进制文件是否具有相同的内容。它们被加载到 Buffer 中,但我还没有找到一种方法来检查两个 Buffer 是否相等。
我使用 NumGet
提出了这个解决方案BufferEqual(Buf1, Buf2) {
if Buf1.Size != Buf2.Size {
return False
}
Int64Chunks := Buf1.Size // 8
Int8Chunks := Mod(Buf1.Size, 8)
Loop Int64Chunks {
Chunk1 := NumGet(Buf1, (A_Index - 1) * 8, "Int64")
Chunk2 := NumGet(Buf2, (A_Index - 1) * 8, "Int64")
if Chunk1 != Chunk2 {
return False
}
}
Loop Int8Chunks {
Chunk1 := NumGet(Buf1, Int64Chunks * 8 + A_Index - 1, "Char")
Chunk2 := NumGet(Buf2, Int64Chunks * 8 + A_Index - 1, "Char")
if Chunk1 != Chunk2 {
return False
}
}
return True
}
我是否缺少一种明显的方法来做到这一点?
memcmp可以使用
BufferEqual(Buf1, Buf2) {
return Buf1.Size == Buf2.Size && DllCall("msvcrt\memcmp", "Ptr", Buf1, "Ptr", Buf2, "Ptr", Buf1.Size) == 0
}