算与IPv6地址(大整数)
-
22-08-2019 - |
题
我的工作与IPv6地址的形式:
录:录:录:录:录:录:录:录
在内部,我们存储在一个阵列:
TIp6Bytes = array [0..15] of Byte;
我需要操纵IPv6地址在一定数量的方式包括增加,分,乘以等等。任何人都可以建议一个很好的方式做到这一点?
我想我应该提到,我正与2009年德尔福
解决方案 2
在尝试许多建议,我不能找到一个图书馆,满足了我所有的需要,并免费的错误。我搜索了一点困难和发现了一个相对较新的图书馆由亚历克斯*乔巴努并BigIntegers(大主教)无缝让你来操纵他们在大致相同的方式操纵正常整数,枢机主教等。
以及BigIntegers,图书馆还提供了一些非常有用的功能。从自述:
- 一套通用的收藏类 (列表、字典。等等)。
- 日期/时间的功能的所有组合 在几构(以某种方式 相等同。净的DateTime 结构)
- 类型的支持的概念定义 组默认的"支持类" 每一个建立在德尔斐类型(作为 违约集).定义 "类型,支持"类可以 注册为你定制的数据 类型。
- BigCardinal和BigInteger的数据类型。
- 聪明的指针在德尔斐
该图书馆正在积极发展。事实上,提交人固定的一个小错误我发现在一天之内。
其他提示
的Jes Klinke写了BIGNUM单元,用于帕斯卡此处。
声明:我没有亲自使用该文库
。我曾经写过一个 IPv4和IPv6转换单元包括一个自定义的变体类型这两种类型的IP地址。
例如,对于这些变体类型,下面的示例算术和转化是可能的:
procedure TForm1.Log(const S: String);
begin
Memo.Lines.Add(S);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I4: TIPv4;
I6: TIPv6;
V1, V2, V3, V4: Variant;
begin
I4 := StrToIPv4('192.0.2.128');
I6 := IPv4ToIPv6(I4);
V1 := VarIPv6Create('2001:db8:85a3:0:0:8a2e:0370:7334');
V2 := IPv6ToVar(I6);
V3 := V1 - V2;
V4 := V1 or V2;
if V3 < V4 then
Log(V3 + ' is smaller than ' + V4);
if V2.Equals('::ffff:192.0.2.128') or V2.IsZero then
Log('OK');
Log('V1 = ' + V1.AsStringOutwritten);
Log('V2 = ' + V2.AsURL);
Log('V3 = ' + V3.AsStringCompressed);
V4.Follow;
end;
自定义变量类型真的是相当强大的。
我会说,如果你可以添加,然后你可以用它来减,乘,除采用分。我应该承担溢出将被完全忽略?
我似乎记得添加使用XOR面向比特的变量的方法。我要寻找这个问题的答案了。
我们希望,这将指向您在正确的方向。如果我能找到XOR代码,我将发布它。
下面,它是: 位运算 异或经常用于位运算。例子: 1 XOR 1 = 0 1 XOR 0 = 1 1110 XOR 1001 = 0111(这相当于加法没有进位)
和基准是: http://www.absoluteastronomy.com/topics/Exclusive_disjunction
不隶属于 StackOverflow