代码之家  ›  专栏  ›  技术社区  ›  Richard J. Ross III

Objective-C将十六进制字符串解析为整数

  •  90
  • Richard J. Ross III  · 技术社区  · 14 年前

    我想知道如何解析一个十六进制字符串,代表一个数字,在Objective-C。我愿意同时使用一个Objective,或基于C的方法,两者都可以。

    例子:

    #01FFFFAB
    

    应解析为整数: 33554347

    任何帮助都将不胜感激!

    7 回复  |  直到 7 年前
        1
  •  171
  •   Ron Kamran Bigdely    10 年前

    0x #01FFFFAB ,您仍然可以使用 NSScanner ,但可以跳过第一个字符。

    unsigned result = 0;
    NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"];
    
    [scanner setScanLocation:1]; // bypass '#' character
    [scanner scanHexInt:&result];
    
        2
  •  63
  •   Alex Terente    11 年前

    你可以用 NSScanner 为了这个

    unsigned int outVal;
    NSScanner* scanner = [NSScanner scannerWithString:@"0x01FFFFAB"];
    [scanner scanHexInt:&outVal];
    

    outVal

        3
  •  12
  •   Graham Perks    14 年前

    strtol()是你的朋友。

    它将字符串转换为长字符串,您可以将数字的基数传入。不过,请先删除#sign off,或者将指向第一个数字字符的指针传递给strtol。

        4
  •  5
  •   carbonr    7 年前

    您可以使用下面的行进行转换。只有一行代码:

    NSString *hexString = @"01FFFFAB";
    length = (UInt64)strtoull([hexString UTF8String], NULL, 16);
    NSLog(@"The required Length is %d", length);
    

    快乐编码!!!

        5
  •  2
  •   Alexander Vasenin    7 年前

    标准库为解析所有整数类型引入了新的初始值设定项。它以字符串为基数(即base)进行解析,并返回可选整数:

    let number = Int("01FFFFAB", radix: 16)!
    
        6
  •  0
  •   hbk    8 年前

    苹果称:

    NSScanner对象解释和转换 将对象转换为数字和字符串值。

    所以,如果你有 NSData 下一步你能做什么

    NSString *dataDescription = data.description;
    NSString *dataAsString = [dataDescription substringWithRange:NSMakeRange(1, [dataDescription length]-2)];
    unsigned intData = 0;
    NSScanner *scanner = [NSScanner scannerWithString:dataAsString];
    [scanner scanHexInt:&intData];
    
        7
  •  0
  •   jnelson    7 年前

    var hex = "#01FFFFAB"
    hex.remove(at: hex.startIndex)
    var rgbValue:UInt32 = 0
    Scanner(string: hex).scanHexInt32(&rgbValue)
    // rgbValue == 33554347