【问题标题】:Integer.parseInt(String s, int radix) equivalent in Objective C在Objective C中等效的Integer.parseInt(String s, int radix)
【发布时间】:2014-05-26 21:04:42
【问题描述】:

我在 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 传递给函数。一些帮助会很棒。

【问题讨论】:

标签: java objective-c algorithm


【解决方案1】:
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;
}

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

【讨论】:

  • 我只是想将十六进制字符串传递给十进制字符串。
  • 抱歉,由于某些原因,我忽略了 radix 参数。考虑到我的回答不正确。
  • 查看修正后的答案。
猜你喜欢
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 2017-08-10
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
相关资源
最近更新 更多