0

重複の可能性:
Objective C は 16 進文字列を整数に解析します

16 進数を表す NSString の整数値が必要です。たとえば、NSString @"A" の int 値 (10) を取得するにはどうすればよいですか?

4

3 に答える 3

4
{
  int value;
  [[NSScanner scannerWithString @"A"] scanHexInt: &value];
  // use value here
}

それが最も単純なコードになります。メソッド scanHexInt は、処理したい成功を示す Bool を返します。

于 2012-05-19T04:16:44.990 に答える
1

をフォーマット指定子sscanfとともに使用して、16 進数の整数として解析できます。%

NSString *str = @"A";
...
int value;
if (sscanf([str UTF8String], "%x", &value) == 1)
{
    // Parsing succeeded
}
else
{
    // Parsing failed, handle error
}
于 2012-05-19T04:02:35.687 に答える
1

NSString には Unicode 文字が含まれる可能性があるため、少し注意する必要があります。文字列を文字ごとに繰り返し処理し、それぞれが有効な 16 進数リテラル、つまりセット 0-9,af,AF 内の文字であることを確認してください。

それができたら (NSString メソッドの characterAtIndex: を使用して個々の文字を調べることができます)、ASCII / UTF-8 標準が数字と文字を順番に並べ替えるという事実を利用するのはかなり簡単です。

具体的には、数字文字「0」から減算された数字文字は、その整数値を返します。同様に、'a'-'f' から 'a' を減算するか、'A'-'F' から 'A' を減算してから 10 を加算すると、16 進文字の整数バージョン (10-15) が得られます。

unichar a = [@"A" characterAtIndex: 0];

if ( a >= '0' && a <= '9' ) a -= '0';
else if ( a >= 'a' && a <= 'z' ) a = ( a - 'a' ) + 10;
else if ( a >= 'A' && a <= 'Z' ) a = ( a - 'A' ) + 10;
else { /* error, raise exception or whatever */ };

// now a == 10 (0x0A)
于 2012-05-19T04:15:03.023 に答える