【问题标题】:What data type should I use to store an IP Address?我应该使用什么数据类型来存储 IP 地址?
【发布时间】:2012-02-06 02:57:34
【问题描述】:

我突然想到这一点,在决定应该使用哪种数据类型来存储 IP 地址时陷入困境?

我想到了NSString;但是如果我需要最后一位数字来识别,我应该使用浮点数还是双精度数?这也是另一个问题,因为 float 或 double 什么时候可以多于 1 个小数点?

我可能问错了问题,因为我真的不知道该怎么问。

IP 地址来自 XML 格式 <IP>192.168.1.1</IP>。知道我应该怎么做吗?

【问题讨论】:

    标签: iphone ip-address


    【解决方案1】:

    使用NSString你不会用它来做算术。如果您需要单独的组件,您可以使用 NSArray,但 NSString 将很好地为您服务,仅用于存储 IP 地址。

    根据您的需要,您始终可以使用NSString 方法获取字符串中的最后一个字符:

    NSString *lastCharacter = [ip_string substringFromIndex: [ip_string length] - 1];
    

    其中 ip_string 是保存 IP 地址的字符串。

    根据评论进行编辑:

    Logan 的代码将 IP 地址中的每个元素存储在一个数组中,并用句点分隔。因此,如果 IP 地址为 192.168.1.1,则数组将等于 (192, 168, 1, 1)。

    我的代码将整个 IP 地址存储在一个字符串中,然后获取该字符串中的最后一个字符。 [ip_string substringFromIndex: [ip_string length] - 1] 只是获取包含 IP 地址的字符串中的最后一个字符。最后一个字符可以在减一个字符处找到。

    所以如果 IP 地址是 192.168.1.1,lastCharacter 字符串将只包含数字 1

    我建议使用该代码是因为您说您需要对 IP 地址字符串中的最后一个字符执行某些操作,而我的代码显示了如何获取最后一个字符。

    【讨论】:

    • 你的代码行和@Logan Serman 的有什么区别?我能理解 Logan Serman 的代码是什么意思,但你的代码我以前从未见过。
    • 查看我编辑的回复。总而言之,它只是获取 IP 地址字符串中的最后一个字符。
    • 啊!这是一些很棒的方法!谢啦!必须测试一下!该方法返回一个 NSString 值对吗?所以如果我需要整数值,我必须应用[lastCharacter integerValue] 方法对吗?
    • 是一个好方法,但不要忘记 IP 的最后一个数字可以有多个数字。请参阅 Logan 的答案。
    【解决方案2】:

    使用字符串。不需要对 IP 进行算术运算吧?

    【讨论】:

    • 现在,我不知道我是否需要做任何算术或算法。可能不是。 :) 感谢您的回复!
    【解决方案3】:

    通常将 IP 地址存储为字符串或整数数组。另一种选择是将其存储为 32 位整数。这真的取决于你想做什么。

    【讨论】:

    • 整数数组听起来是个好主意。但是您是否在 1 个数组中存储 4 个数字?或者你存储整个IP地址,因为如果你这样做了,是不是和将它存储为一个NSString一样?
    • @Melvin Lai:两种方式分别是:var array = int[] {192,168,0,1}; //Or reversedvar i = 192 << 24 + 168 << 16 + 0 << 8 + 1;。通过将其存储为 32 位整数,您可以最大限度地减少所需的存储空间,并具有用于索引目的的处理值。如果需要,该数组只是为您提供对整数形式的简单访问(假设您正在执行基于掩码的过滤器,但不想使用位逻辑来获取 168)。请注意,在所有情况下,除非您正在做一些非常复杂的事情,否则从简单的角度来看,字符串形式可能是最好的。
    【解决方案4】:

    我会使用NSString。如果你需要一块一块地得到它,使用:

    NSArray *pieces = [ipAddress componentsSeparatedByString: @"."];
    

    【讨论】:

    • 谢谢!看到这么多答案,我猜都回答了相同的数据类型。存储为NSString。但是看到你的代码,我想这也会很好! :)
    【解决方案5】:

    192.168.1.1 被认为是众多家用高速无线路由器的默认 IP。它最初由 Linksys 使用,但已被用于许多其他家庭网络产品,包括 Netgear 和 Westell 等制造的一些产品。

    尽管IP address 是许多高速宽带无线路由器的默认 IP,但实际上并非必须如此。大量生产商将默认 IP 地址设置为 192.168.1.1,作为推销标准处理条件的一种方式,并让初次使用的客户更简单、更高效地设置自己的网络系统。

    是否只能使用 192.168.1.1 IP 运行 Linksys 以及其他无线路由器?

    当然不是,鉴于 192.168.1.1 绝对是一个非公共 IPv4 地址,任何类型的笔记本电脑或计算机、调制解调器、交换机或其他网络系统都可能被设计为使用这个唯一的 IP。尽管如此,在大多数情况下这并不可取,因为有很多产品默认为 192.168.1.1,而使用相同 IP 的许多不同产品很快就会出现交互问题。考虑到单个网络设备可能只有一个 Ip 也很重要,如果您拥有多个使用 private IP address 的设备,则基本上至少必须将一个设备调整到其他位置。

    【讨论】:

    • 你知道你在回答什么吗?这是一个编程问题,而不是一些路由器问题。我们这个网站上的大多数人都知道什么是路由器,有哪些品牌以及它的作用。请删除这个答案,因为它完全不适合这个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2015-06-17
    相关资源
    最近更新 更多