objective-c - 如何在有符号的基数10和无符号基数16之间进行转换

时间:2011-08-01 16:53:48

标签: objective-c base unsigned-integer

我想知道如何在 未签名 基础16 号码和 签名之间进行转换 基数10 数字?

例如

5d0cfa30041d4348< - > 6705009029382226760

024025978b5e50d2< - > 162170919393841362

fb115bd6d34a8e9f< - > -355401917359550817

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

我可以使用的任何课程?

由于

1 个答案:

答案 0 :(得分: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以确定扫描是否成功。如果使用字符串,最好检查扫描是否成功。