在IPv4下,我已经将IP地址的字符串表示解析为Int32,并将它们作为INT存储在SQL Server中。
现在,对于IPv6,我正在尝试找出是否有一种标准的或可接受的方法来使用C#将IPv6的字符串表示解析为两个Int64
另外,人们如何将这些值作为BIGINT的两个字段存储在SQL Server中
发布于 2009-04-21 21:44:38
正如IPv4地址实际上是32位数字一样,IPv6地址也是128位数字。地址有不同的字符串表示,但实际地址是数字,而不是字符串。
因此,您不必将IP地址转换为数字,而是将地址的字符串表示形式解析为实际地址。
即使是decimal也不能容纳128位的数字,因此只剩下三种明显的选择:
bigint字段的数值varchar字段中binary字段<代码>H210<代码>F211这两种方法都不如在int中存储IPv4地址方便,因此您必须考虑它们的局限性以及您需要对这些地址执行的操作。
发布于 2009-04-22 09:48:01
最简单的方法是让框架为您做这件事。使用IPAddress.Parse解析地址,然后使用IPAddress.GetAddressBytes获取byte[]形式的"number“。
最后,将数组分成第一个和第二个8字节,以便转换为两个Int64s,例如,通过在字节数组上创建MemoryStream,然后通过BinaryReader读取。
这样就无需了解IPv6地址的所有可用快捷方式表示法。
发布于 2010-02-24 07:56:42
如果使用的是SQL Server2005,则可以使用uniqueidentifier类型。此类型存储16字节,这对于IPv6 ip地址来说是完美的。您可以使用构造函数和ToByteArray在IPAddress和Guid之间进行转换。
https://stackoverflow.com/questions/774536
复制相似问题