Objective C中的Integer.parseInt(String s,int radix)等效项

时间:2014-04-12 17:58:19

标签: java objective-c algorithm

我在Java中有这个功能:

private String hexStringToByteString(String s) {

    String r = "";

    for (int i = 0; i < s.length(); i += 2)
        r += (char) Integer.parseInt(s.substring(i, i + 2), 16);   

    return r;
}

并且必须在Objective C中实现这一点,因为我正在开发一个应用程序并且必须进行一些加密。问题是我不知道如何制作Integer.parseInt部分,将String和radix int传递给函数。一些帮助会很棒。

1 个答案:

答案 0 :(得分:0)

NSString r = @""; 
r = [r stringByAppendingString: [ [s substringWithRange:NSRangeMake(i, i + 2)] intValue]]; 

或者:

NSMutableString r = @""; 
[r appendingString: [ [s substringWithRange:NSRangeMake(i, i + 2)] intValue]]; 

我只相信有更好的方法可以实现同样的目标。您能否提供一些关于s包含什么以及您将要实现的内容的更多信息?例如当这样做只是为了摆脱空格,那么下面会做 - 即使没有for循环。

NSMutableString r = [NSMutableString stringWithString:s];
[r replaceOccurrencesOfString:@" " withString:"" options:NSLiteralSearch range:NSMakeRange(0, [s length])];

根据您的评论进行修改。 但要注意。仅将此作为起点。我以前从未这样做过。可能有更好的解决方案,它可能包含小错误。

- (NSString) hexStringToByteString(NSString s) {

  NSMutableData d = [NSData dataWithLength: [s length] / 2];

  NSUInteger v; 

  for (int i = 0, i < [s length], i+=2) {
    NSScanner *scanner = [NSScanner scannerWithString:[s substringWithRange:NSRangeMake(i, i + 2)]];

    [scanner scanHexInt:&v];

    [d appendBytes:&v length:1];
  }

  NSData r = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
  return r;
}

当然,您可以选择不同的编码。