【问题标题】:Objective C String Manipulation of an IP AddressIP地址的Objective C字符串操作
【发布时间】:2014-01-11 12:54:13
【问题描述】:

我有一个本地 IP 地址的 NSString,我需要删除此 IP 地址上的最后一组数字并替换为 255。我这样做是为了从本地 IP 地址创建广播数据包。

我已经检查了所有可用的字符串操作函数,但找不到一个 Left 函数,这将有助于这种情况。

基本上我想这样做:-

将 192.168.1.10 转换为 192.168.1.255

编辑:请注意以下信息以计算网络的广播地址。它是通过对 IP 地址和反转的网络掩码执行按位或来计算的。你可以在这里看到一个计算器 - http://www.subnet-calculator.com/

关于如何计算广播地址的实际代码也可以在这里找到 - Calculating the Broadcast Address in Objective-C

添加此内容是为了避免对我的问题造成任何混淆。

【问题讨论】:

  • 哇!你们中的一些人很坚强(或者也许只是意气风发)。我不敢相信我对这个问题投了反对票。我做了我的研究,这在以前的任何帖子或网络上都没有。看看答案,没那么简单!这个问题肯定会在将来对其他人有所帮助。看看这个更简单的相同类型的问题,它有 79 个赞成票 - stackoverflow.com/questions/1082178/…

标签: objective-c string nsstring


【解决方案1】:
NSScanner* scanner = [NSScanner scannerWithString:idAddress];
[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"."]];
int a, b, c;
[scanner scanInt:&a];
[scanner scanInt:&b];
[scanner scanInt:&c];
NSString* result = [NSString stringWithFormat:@"%d.%d.%d.255", a, b, c];

【讨论】:

  • 但用 255 替换最后一个数字仅适用于网络掩码“255.255.255.0”。通常,您需要使用带有反转网络掩码的按位 OR IP 来获得 boarcast IP。 – Cy-4AH 11 分钟前
  • 我没有考虑或测试过。所以谢谢,我会调查一下!
【解决方案2】:

Getting index of a character in NSString with offset & using substring in Objective-C 向您展示了如何在另一个字符串中找到一个字符串的范围,包括向后搜索的选项。使用它,在您的 IP 地址ipaddr 中找到@"." 的范围(使用NSBackwardsSearch 选项)。

假设您将范围放入名为 range 的变量中,range.location 是您所需要的,但 range.length 不是(它是 1,@"." 的长度),因此请修正:range.length = [ipaddr.length] - range.location;

最后,使用该范围执行替换:maskAddress = [ipaddress stringByReplacingCharactersInRange:range withString:@".255"];

现在maskAddr 包含您描述的替换。

【讨论】:

  • 我刚刚阅读了您的个人资料。所以很抱歉,我知道你在你的回答中付出了很多努力。但最后,作为一名通过查看和审查代码来学习的程序员,没有什么比代码更好的了。我们的学习方式都不同,而且我已经编程了 30 多年,所以从概念上讲,我不太可能学习新东西,但不同语言的语法和方法,那是另一回事。我确实投了赞成票:-)
【解决方案3】:

NSString 有 -componentsSeparatedByString: 你可以用它把字符串分隔成一个数组(如果你指定@“.” 作为字符串),改变数组,然后用 NSArray 的 -componentsJoinedByString 把它们重新组合在一起:

或者你可以使用 NSString 的 -rangeOfString:@“.” options:NSBackwardsSearch 查找最后一个“.”的位置。是,然后用 substringToIndex: 拉开字符串并附加你的@“255”。

或者您可以使用 NSString 的 -stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement options:(NSStringCompareOptions)options range:(NSRange)searchRange 并指定您正在执行 RegEx,但那是更难。

【讨论】:

    【解决方案4】:

    您可以像 here 那样在 NSSring 对象上使用方法 substringToIndex

    然后追加一个字符串或使用NSStringWithFormat创建一个新的

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-25
      相关资源
      最近更新 更多