c# - 如何在字节 [] 的两个部分(带偏移量)上调用 memcmp()?

标签 c# .net c++-cli pinvoke memcmp

我想有效地比较 byte[] 的部分 - 所以我知道应该使用 memcmp()

我知道我可以使用 PInvoke 调用 memcmp() - Comparing two byte arrays in .NET

但是,我只想比较 byte[] 的部分 - 使用偏移量,并且没有带偏移量的 memcmp(),因为它使用指针。

int CompareBuffers(byte[] buffer1, int offset1, byte[] buffer2, int offset2, int count)
{
  // Somehow call memcmp(&buffer1+offset1, &buffer2+offset2, count)
}

我应该使用 C++/CLI 来做到这一点吗?

我应该将 PInvoke 与 IntPtr 一起使用吗?怎么办?

谢谢。

最佳答案

[DllImport("msvcrt.dll")]
private static extern unsafe int memcmp(byte* b1, byte* b2, int count);

public static unsafe int CompareBuffers(byte[] buffer1, int offset1, byte[] buffer2, int offset2, int count)
{
    fixed (byte* b1 = buffer1, b2 = buffer2)
    {
        return memcmp(b1 + offset1, b2 + offset2, count);
    }
}

您可能还想添加一些参数验证。

关于c# - 如何在字节 [] 的两个部分(带偏移量)上调用 memcmp()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000803/

相关文章:

c# - 如果 (Input.GetKeyDown(KeyCode.UpArrow)); - 统一控制台垃圾邮件

c# - Asp.net Core 2 使用 Identity Server 4 启用 Multi-Tenancy

.net - 为什么我不应该使用 Process.GetCurrentProcess().Kill() 退出我的 WinForm 应用程序?

.net - C++/CLI 堆栈语义等效于 C# 的现有对象 using 语句?

c# - 在 native C++ 中编写 C# 托管代码

c# - 选择另一个旁边的特定节点 - C# - SelectSingleNode

c# - 有什么方法可以制作包含多个元素的 C# 列表?

.net - 没有配置文件时 System.Configuration.ConfigurationManager 指向哪里?

.net - 如何从堆栈中删除值类型?

c++ - C# 到 c++/cli 到 unamanged c++ ref