栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

.NET中的两个字节数组比较

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.NET中的两个字节数组比较

gil 用户建议使用不安全的代码,从而产生了此解决方案:

// Copyright (c) 2008-2013 Hafthor Stefansson// Distributed under the MIT/X11 software license// Ref: http://www.opensource.org/licenses/mit-license.php.static unsafe bool UnsafeCompare(byte[] a1, byte[] a2) {  if(a1==a2) return true;  if(a1==null || a2==null || a1.Length!=a2.Length)    return false;  fixed (byte* p1=a1, p2=a2) {    byte* x1=p1, x2=p2;    int l = a1.Length;    for (int i=0; i < l/8; i++, x1+=8, x2+=8)      if (*((long*)x1) != *((long*)x2)) return false;    if ((l & 4)!=0) { if (*((int*)x1)!=*((int*)x2)) return false; x1+=4; x2+=4; }    if ((l & 2)!=0) { if (*((short*)x1)!=*((short*)x2)) return false; x1+=2; x2+=2; }    if ((l & 1)!=0) if (*((byte*)x1) != *((byte*)x2)) return false;    return true;  }}

它将对尽可能多的数组进行基于64位的比较。这种依靠数组以qword开头的事实。如果没有qword对齐,它将可以工作,只是速度不如它快。

它比简单

for
循环执行大约七个计时器。使用J#库等效于原始
for
循环执行。使用.SequenceEqual大约慢7倍;我认为只是因为它正在使用IEnumerator.MoveNext。我想象基于LINQ的解决方案至少要这么慢或更糟。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442837.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号