检查两个缓冲区是否相等

问题描述 投票:0回答:1

我想检查两个二进制文件是否具有相同的内容。它们被加载到 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
}

我是否缺少一种明显的方法来做到这一点?

autohotkey
1个回答
0
投票

memcmp可以使用

BufferEqual(Buf1, Buf2) {
    return Buf1.Size == Buf2.Size && DllCall("msvcrt\memcmp", "Ptr", Buf1, "Ptr", Buf2, "Ptr", Buf1.Size) == 0
}
© www.soinside.com 2019 - 2024. All rights reserved.