当前位置:  开发笔记 > 编程语言 > 正文

将IPv6格式化为C#中的int并将其存储在SQL Server中

如何解决《将IPv6格式化为C#中的int并将其存储在SQLServer中》经验,为你挑选了2个好方法。

IPv4我已经解析IP地址的字符串表示Int32并将其存储INTSQL Server.

现在,IPv6我试图找出是否有对的字符串表示解析标准或接受的方式IPv6在两个Int64使用C#

人们如何将这些价值存储在SQL Server- 作为两个领域BIGINT



1> Guffa..:

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

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

甚至decimal不能容纳128位数字,因此留下三个明显的替代方案:

将数值存储分为两个bigint字段

varchar字段中存储地址的字符串表示形式

将数值存储在16字节binary字段中

既不像在一个存储IPv4地址那样方便int,所以你必须考虑它们对你需要对地址做什么的限制.


对不起,如果我的幽默不清楚,我笑了两个帖子之间的矛盾.对我来说,4字节或32位似乎是同一枚硬币的两面.与其他地方存在的int或binary相同的模糊性:RFC 719第12页规定"源地址:32位"并且在此问题上没有其他内容.核心互联网协议p.408将其描述为"实际上是一个32位二进制数",wiki说"32位(四字节)地址".IP寻址基础知识,第22页说"IP地址是在长度为32位的数学空间内定义的." 4字节还是32位?是的,请!
@Bill:你错了.没有任何内容表明您必须将IPv4地址的字节存储在无符号值中.Int32有32位和UInt32一样,所以它适用于存储四个字节.
@EBarr虽然IP地址是32位数(或4个字节),但它并不总是int(由于机器字节序),这就是为什么建议将它存储为字节数组的原因.例如,如果您要将IP 192.168.1.1转换为x86/x64计算机上的int,则其值为0xC0A80101.如果您要将该整数写入文件(或将其推送到网络中),则将以0x0101A8C0的顺序存储这些位.

2> Richard..:

最简单的方法是让框架为您完成此操作.使用IPAddress.Parse解析地址,然后IPAddress.GetAddressBytes获得"数"为字节[].

最后,将数组划分为第一个和第二个8个字节,以便转换为两个Int64,例如,通过创建一个MemoryStream字节数组,然后通过a读取BinaryReader.

这避免了需要了解IPv6地址的所有可用快捷方式表示.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有