怎么呼叫memcmp()上两个部分的字节[](与偏)?
题
我想比较的部分 byte[]
有效的-所以我明白 memcmp()
应该使用。
我知道我可以使用PInvoke叫 memcmp()
- 比较两个字节数。净
但是,我想比较只有部分 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有因此?怎么样?
谢谢你。
解决方案
C++/CLI肯定会是最干净的,但是这几乎没有证明加入C++/CLI到项目如果你不是已经在使用它。
怎么样 元帅。UnsafeAddrOfPinnedArrayElement(阵列,抵消)?
其他提示
[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);
}
}
您可能还需要添加一些参数验证。
没有必要的P / Invoke在C ++ / CLI。使用pin_ptr <>到管脚阵列。这让你一个字节*,只需添加偏移。
不管你做什么,你应该检查偏移/计数值适用于给定的字节数组。你这样做之后,我不认为只是做了如何在C#中for
循环将是任何除P慢/调用一个Win32方法。好像将有大量的开销在P /调用,它不会是值得的。
此外,总是有不安全的C#。
与所有的性能问题,你应该做你自己的性能测试。但它听起来像你对我试图优化性能过早。
还有一个方法
SequenceEqual从System.Linq的
byte[] ByteArray1 = null;
byte[] ByteArray2 = null;
ByteArray1 = MyFunct1();
ByteArray2 = MyFunct2();
if (ByteArray1.SequenceEqual<byte>(ByteArray2))
{
MessageBox.Show("Same");
}
else
{
MessageBox.Show("Not Equal");
}
不隶属于 StackOverflow