gpt4 book ai didi

c# - SQL Server 2012 中的 128 位 Int?

转载 作者:太空狗 更新时间:2023-10-30 00:51:34 24 4
gpt4 key购买 nike

我正在寻找在 SQL Server 中实现 128 位无符号整数的最佳方法。主要要求是它必须支持所有 128 位的按位运算。 (这在理论上在 64 位机器上是否可行?我离题了。)

我读过一些通过 CLR 程序集使用 C# 和用户定义类型的实现,但我无法确定它们是否支持按位运算。

有没有人成功地完成了我需要做的事情?任何投入将不胜感激。谢谢!!

最佳答案

数据库方面,我会使用 binary[16] 列。

然后在 clr 代码中,您可以在自定义类型中重载按位运算符:

public struct My128BitValue
{
private readonly long _l1;
private readonly long _l2;

public My128BitValue(long l1, long l2)
{
_l1 = l1;
_l2 = l2;
}

public static My128BitValue operator &(My128BitValue left, My128BitValue right)
{
return new My128BitValue(left._l1 & right._l1, left._l2 & right._l2);
}

public static My128BitValue operator |(My128BitValue left, My128BitValue right)
{
return new My128BitValue(left._l1 | right._l1, left._l2 | right._l2);
}

public static My128BitValue operator ^(My128BitValue left, My128BitValue right)
{
return new My128BitValue(left._l1 ^ right._l1, left._l2 ^ right._l2);
}
}

这里是CLR基础示例,需要完成FromByteArrayToByteArray方法:

using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
[SqlFunction()]
public static SqlBinary bitwiseAnd128Bit(SqlBinary lhs, SqlBinary rhs)
{
My128BitValue v1 = My128BitValue.FromByteArray((byte[])lhs); //explicit conversion
My128BitValue v2 = My128BitValue.FromByteArray((byte[])rhs);
My128BitValue result = v1 & v2;
return result.ToByteArray(); //implicit conversion
}
}

然后您可以从 SQL 对两列运行 bitwiseAnd128Bit

在此处阅读有关 CLR 的更多信息 http://msdn.microsoft.com/en-us/library/w2kae45k(v=vs.90).aspx

关于c# - SQL Server 2012 中的 128 位 Int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26292698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com