0

我想知道如何在无符号基 16数字和有符号基 10数字之间进行转换?

例如

5d0cfa30041d4348 <-> 6705009029382226760

024025978b5e50d2 <-> 162170919393841362

fb115bd6d34a8e9f <-> -355401917359550817

顺便说一句,它们实际上是某些项目的 ID。在内部,它们都是 64 位数字,但在两个演示文稿中。

我可以使用任何课程吗?

谢谢

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 回答