target-c - как преобразовать числа со знаком base 10 в число без знака base 16 - PullRequest
0 голосов
/ 01 августа 2011

Мне интересно, как сделать преобразование между без знака основания 16 числа и со знаком основания 10 числа?

Например

5d0cfa30041d4348 <-> 6705009029382226760

024025978b5e50d2 <-> 162170919393841362

fb115bd6d34a8e9f <-> -355401917359550817

Кстати, на самом деле это идентификаторы некоторых предметов. А внутри они все 64-битные числа, но в двух презентациях.

Какие классы я могу использовать?

Спасибо

1 Ответ

1 голос
/ 01 августа 2011

Если базовое значение 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, независимо от того, было ли сканирование успешным. При работе со строками лучше всего проверить, что сканирование прошло успешно.

...