首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算二进制域之间的差值?

如何计算二进制域之间的差值?
EN

Stack Overflow用户
提问于 2012-04-21 09:05:09
回答 1查看 65关注 0票数 1

我希望有一个存储为binary(64) (固定长度)的字段,然后我希望能够查询“最接近的匹配”。为此,我只想找出每个字节之间的绝对差异,然后求出差异的总和。

一个包含四个字节字符串的示例:

代码语言:javascript
复制
  13 AF 83 52
- E9 B4 9C 19
  -----------
  D6 05 19 39

D6 + 05 + 19 + 39 = 12D = 301 base 10

我使用的是实体框架,所以最好用Linq编写,但如果不可能,也可以使用raw-SQL。

我预计这不会很快,这就是为什么我计划首先使用另一个键来尽可能缩小结果的范围。这可以在Linq/SQL中实现吗?

否则,我认为我可以使用64个单字节字段,但我并不真的想手动编写代码(我不可能编写循环,对吧?)

EN

回答 1

Stack Overflow用户

发布于 2012-04-21 11:00:33

在这个4字节的例子中,可能是这样的:

代码语言:javascript
复制
DECLARE @b1 BINARY(4)=0x13+0xAF+0x83+0x52;
DECLARE @b2 BINARY(4)=0xE9+0xB4+0x9C+0x19;

SELECT ABS(CAST(SUBSTRING(@b1,1,1) AS INT)-CAST(SUBSTRING(@b2,1,1) AS INT))
+ ABS(CAST(SUBSTRING(@b1,2,1) AS INT)-CAST(SUBSTRING(@b2,2,1) AS INT))
+ ABS(CAST(SUBSTRING(@b1,3,1) AS INT)-CAST(SUBSTRING(@b2,3,1) AS INT))
+ ABS(CAST(SUBSTRING(@b1,4,1) AS INT)-CAST(SUBSTRING(@b2,4,1) AS INT))

结果: 301 (以10为基数)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10255308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档