我的工作与IPv6地址的形式:

录:录:录:录:录:录:录:录

在内部,我们存储在一个阵列:

TIp6Bytes = array [0..15] of Byte;

我需要操纵IPv6地址在一定数量的方式包括增加,分,乘以等等。任何人都可以建议一个很好的方式做到这一点?

我想我应该提到,我正与2009年德尔福

有帮助吗?

解决方案 2

在尝试许多建议,我不能找到一个图书馆,满足了我所有的需要,并免费的错误。我搜索了一点困难和发现了一个相对较新的图书馆由亚历克斯*乔巴努并BigIntegers(大主教)无缝让你来操纵他们在大致相同的方式操纵正常整数,枢机主教等。

以及BigIntegers,图书馆还提供了一些非常有用的功能。从自述:

  • 一套通用的收藏类 (列表、字典。等等)。
  • 日期/时间的功能的所有组合 在几构(以某种方式 相等同。净的DateTime 结构)
  • 类型的支持的概念定义 组默认的"支持类" 每一个建立在德尔斐类型(作为 违约集).定义 "类型,支持"类可以 注册为你定制的数据 类型。
  • BigCardinal和BigInteger的数据类型。
  • 聪明的指针在德尔斐

该图书馆正在积极发展。事实上,提交人固定的一个小错误我发现在一天之内。

你可以读取更多的有关图书馆 亚历克斯的 博客及下载DeHL从 谷歌的代码.

其他提示

的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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top