Objective-Cで、数値を表す16進文字列を解析する方法を知りたいです。私は客観的またはCベースの方法の両方を使用したいと思っていますが、どちらでも構いません。
例:
#01FFFFAB
整数に解析する必要があります:33554347
助けていただければ幸いです!
Joshua Weinbergの答えはほとんど正しいですが、16進整数をスキャンする場合、0x
プレフィックスはオプションです。 #01FFFFAB
形式の文字列がある場合でも、NSScanner
を使用できますが、最初の文字をスキップできます。
unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"];
[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&result];
このために NSScanner を使用できます
unsigned int outVal;
NSScanner* scanner = [NSScanner scannerWithString:@"0x01FFFFAB"];
[scanner scanHexInt:&outVal];
outVal
には、探しているintが含まれます。 0xはオプションです。
strtol()はあなたの友達です。
文字列をlongに変換し、数値の基数を渡すことができます。ただし、最初に#記号を削除するか、strtolに最初の数値文字へのポインターを渡します。
以下の行を変換に使用できます。その1行のコード:
NSString *hexString = @"01FFFFAB";
length = (UInt64)strtoull([hexString UTF8String], NULL, 16);
NSLog(@"The required Length is %d", length);
ハッピーコーディング!!!
Swift 4標準ライブラリは、すべての整数型を解析するための新しい初期化子を導入しました。基数(つまり、base)で解析する文字列を受け取り、オプションの整数を返します。
let number = Int("01FFFFAB", radix: 16)!
Appleによると:
NSScannerオブジェクトは、NSStringオブジェクトの文字を解釈し、数値と文字列値に変換します。
したがって、uがNSData
objを持っている場合、uは次に実行できます
NSString *dataDescription = data.description;
NSString *dataAsString = [dataDescription substringWithRange:NSMakeRange(1, [dataDescription length]-2)];
unsigned intData = 0;
NSScanner *scanner = [NSScanner scannerWithString:dataAsString];
[scanner scanHexInt:&intData];
Swift= 3:
var hex = "#01FFFFAB"
hex.remove(at: hex.startIndex)
var rgbValue:UInt32 = 0
Scanner(string: hex).scanHexInt32(&rgbValue)
// rgbValue == 33554347