如何比较长度不能被4整除的两个字节数组

本文介绍了一种比较两个字节数组是否相等的方法,即使数组长度不是4的倍数也能正确处理。通过将数组转换为整数指针进行快速比较,然后针对剩余字节进行逐个检查,提高了比较效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章原打算放在另一篇名为“如何比较两个字节数组”的文章的结尾,Vadym Stetsyak回答了该文章,但该文章已关闭。 我用他在那篇文章中的代码创建了这篇文章,并添加了上一篇文章中讨论的两项:

1.不同长度的数组

2.缓冲区必须被4整除。

我只是使用两个字节指针检查其余字节。

public unsafe static bool CompareByteArrays(byte[] b1, byte[] b2)
{
    if (b1.Length != b2.Length)
        return false;
    fixed (byte* bp1 = b1)
    {
        fixed (byte* bp2 = b2)
        {
            int* ip1 = (int*) bp1;
            int* ip2 = (int*) bp2;
            for (int i = 0; i < b1.Length/4; i++)
            {
                if (ip2[i] != ip1[i])
                    return false;
            }
            if ((b1.Length % 4) != 0)
            {
            for (int i = b1.Length - (b1.Length % 4); i < b1.Length; i++)
            {
                if (bp2[i] != bp1[i])
                    return false;
            }
            } 
            return true;
        }
    }
}

和平,

罗伯

From: https://bytes.com/topic/c-sharp/insights/886686-how-compare-two-byte-arrays-length-not-divisible-4-a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值