0

符号なしの基数 16の数値と符号付きの基数 10の数値を変換する方法を知りたいですか?

例えば

5d0cfa30041d4348 <-> 6705009029382226760

024025978b5e50d2 <-> 162170919393841362

fb115bd6d34a8e9f <-> -355401917359550817

ちなみに、それらは実際にはいくつかのアイテムの ID です。内部的にはすべて 64 ビットの数値ですが、2 つの形式で表示されます。

使用できるクラスはありますか?

ありがとう

4

1 に答える 1

1

基数 16 の値が定数であるか、変数に格納されている場合は、単純なキャストが機能します。

long long llint1 = (long long int)0x5d0cfa30041d4348;
long long llint2 = (long long int)0x024025978b5e50d2;
long long llint3 = (long long int)0xfb115bd6d34a8e9f;

NSLog(@"\n%lld\n%lld\n%lld", llint1, llint2, llint3);

値が文字列の場合は、最初にスキャンする必要があります。

unsigned long long tmp;
NSScanner *nscanner = [NSScanner scannerWithString:@"0x5d0cfa30041d4348"];
[nscanner scanHexLongLong:&tmp];

llint1 = (long long int)tmp;

nscanner = [NSScanner scannerWithString:@"0x024025978b5e50d2"];
[nscanner scanHexLongLong:&tmp];

llint2 = (long long int)tmp;

nscanner = [NSScanner scannerWithString:@"0xfb115bd6d34a8e9f"];
[nscanner scanHexLongLong:&tmp];

llint3 = (long long int)tmp;

NSLog(@"\n%lld\n%lld\n%lld", llint1, llint2, llint3);

注:scanHexLongLongおよびその他のスキャン メソッドは、スキャンが成功したかどうかを示す BOOL を返します。文字列を操作する場合は、スキャンが成功したことを確認することをお勧めします。

于 2011-08-01T17:14:21.117 に答える