首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中将IPv6格式化为整数并将其存储在SQL Server中

在C#中将IPv6格式化为整数并将其存储在SQL Server中
EN

Stack Overflow用户
提问于 2009-04-21 20:51:29
回答 5查看 17.2K关注 0票数 21

IPv4下,我已经将IP地址的字符串表示解析为Int32,并将它们作为INT存储在SQL Server中。

现在,对于IPv6,我正在尝试找出是否有一种标准的或可接受的方法来使用C#IPv6的字符串表示解析为两个Int64

另外,人们如何将这些值作为BIGINT的两个字段存储在SQL Server

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-21 21:44:38

正如IPv4地址实际上是32位数字一样,IPv6地址也是128位数字。地址有不同的字符串表示,但实际地址是数字,而不是字符串。

因此,您不必将IP地址转换为数字,而是将地址的字符串表示形式解析为实际地址。

即使是decimal也不能容纳128位的数字,因此只剩下三种明显的选择:

  • 存储拆分为两个bigint字段的数值
  • 将地址的字符串表示存储在varchar字段中
  • 将数值存储在16字节的binary字段<代码>H210<代码>F211

这两种方法都不如在int中存储IPv4地址方便,因此您必须考虑它们的局限性以及您需要对这些地址执行的操作。

票数 20
EN

Stack Overflow用户

发布于 2009-04-22 09:48:01

最简单的方法是让框架为您做这件事。使用IPAddress.Parse解析地址,然后使用IPAddress.GetAddressBytes获取byte[]形式的"number“。

最后,将数组分成第一个和第二个8字节,以便转换为两个Int64s,例如,通过在字节数组上创建MemoryStream,然后通过BinaryReader读取。

这样就无需了解IPv6地址的所有可用快捷方式表示法。

票数 12
EN

Stack Overflow用户

发布于 2010-02-24 07:56:42

如果使用的是SQL Server2005,则可以使用uniqueidentifier类型。此类型存储16字节,这对于IPv6 ip地址来说是完美的。您可以使用构造函数和ToByteArrayIPAddressGuid之间进行转换。

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

https://stackoverflow.com/questions/774536

复制
相关文章

相似问题

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