在IPv4
我已经解析IP地址的字符串表示Int32
并将其存储INT
在SQL Server
.
现在,IPv6
我试图找出是否有对的字符串表示解析标准或接受的方式IPv6
在两个Int64
使用C#
?
人们如何将这些价值存储在SQL Server
- 作为两个领域BIGINT
?
正如IPv4地址实际上是32位数字一样,IPv6地址实际上是128位数字.地址有不同的字符串表示形式,但实际地址是数字,而不是字符串.
因此,您不会将IP地址转换为数字,而是将地址的字符串表示形式解析为实际地址.
甚至decimal
不能容纳128位数字,因此留下三个明显的替代方案:
将数值存储分为两个bigint
字段
在varchar
字段中存储地址的字符串表示形式
将数值存储在16字节binary
字段中
既不像在一个存储IPv4地址那样方便int
,所以你必须考虑它们对你需要对地址做什么的限制.
最简单的方法是让框架为您完成此操作.使用IPAddress.Parse
解析地址,然后IPAddress.GetAddressBytes
获得"数"为字节[].
最后,将数组划分为第一个和第二个8个字节,以便转换为两个Int64,例如,通过创建一个MemoryStream
字节数组,然后通过a读取BinaryReader
.
这避免了需要了解IPv6地址的所有可用快捷方式表示.