web-dev-qa-db-ja.com

Objective-Cは16進数文字列を整数に解析します

Objective-Cで、数値を表す16進文字列を解析する方法を知りたいです。私は客観的またはCベースの方法の両方を使用したいと思っていますが、どちらでも構いません。

例:

#01FFFFAB

整数に解析する必要があります:33554347

助けていただければ幸いです!

91

Joshua Weinbergの答えはほとんど正しいですが、16進整数をスキャンする場合、0xプレフィックスはオプションです。 #01FFFFAB形式の文字列がある場合でも、NSScannerを使用できますが、最初の文字をスキップできます。

unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"];

[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&result];
166
dreamlax

このために NSScanner を使用できます

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

outValには、探しているintが含まれます。 0xはオプションです。

62
Joshua Weinberg

strtol()はあなたの友達です。

文字列をlongに変換し、数値の基数を渡すことができます。ただし、最初に#記号を削除するか、strtolに最初の数値文字へのポインターを渡します。

12
Graham Perks

以下の行を変換に使用できます。その1行のコード:

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

ハッピーコーディング!!!

4
iProgrammer

Swift 4標準ライブラリは、すべての整数型を解析するための新しい初期化子を導入しました。基数(つまり、base)で解析する文字列を受け取り、オプションの整数を返します。

let number = Int("01FFFFAB", radix: 16)!
1

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];
0
gbk

Swift= 3:

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