【问题标题】:ObjC string/char manipulation + parsingObjC 字符串/字符操作 + 解析
【发布时间】:2012-08-02 10:51:17
【问题描述】:

以下代码应该返回两个整数:val1 = 2 和 val2 = 5。

    NSString *col = @"1245DD";

    char c1 = [col characterAtIndex:1];
    char c2 = [col characterAtIndex:3];

    int val1 = [[[NSString alloc] initWithUTF8String:&c1] intValue];
    int val2 = [[[NSString alloc] initWithUTF8String:&c2] intValue];

在运行时检查值:

  • c1 = '2'

  • c2 = '5'

到目前为止还不错。

然后:

  • val1 = 2
  • val2 = 52

我不明白为什么 val2 总是最终成为 c2 和 c1 的串联。我错过了什么? 谢谢,

【问题讨论】:

    标签: objective-c parsing nsstring char


    【解决方案1】:

    您正在创建一个 NSString 对象作为 UTF-8 字符串,这实际上是一个字符。如果你想像这样使用它,你需要 NUL 终止 UTF-8 字符串。

    请注意,[NSString characterAtIndex:] 返回的是 unichar,而不是 char,因此请使用 [NSString initWithCharacters:length:],而不是告诉方法要使用多少个字符:

    NSString col = @"1245DD";
    
    unichar c1 = [col characterAtIndex:1];
    unichar c2 = [col characterAtIndex:3];
    
    int val1 = [[[NSString alloc] initWithCharacters:&c1 length:1] intValue];
    int val2 = [[[NSString alloc] initWithCharacters:&c2 length:1] intValue];
    

    【讨论】:

    • 确实,错过了 & ;-) 感谢您的解释!
    • val1 = c1 - '0'; 也会这样做,我想。 unichars 超集 chars 和 ASCII 连续排列数字并按升序排列
    • @Jem 不,这不是损坏的位(数组的 name 是其第一个元素的地址)。它在其他地方坏了......
    猜你喜欢
    • 2012-01-24
    • 2011-03-11
    • 1970-01-01
    • 2015-01-13
    • 2010-11-07
    • 2021-02-24
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多