我想知道如何在无符号基 16数字和有符号基 10数字之间进行转换?
例如
5d0cfa30041d4348 <-> 6705009029382226760
024025978b5e50d2 <-> 162170919393841362
fb115bd6d34a8e9f <-> -355401917359550817
顺便说一句,它们实际上是某些项目的 ID。在内部,它们都是 64 位数字,但在两个演示文稿中。
我可以使用任何课程吗?
谢谢
我想知道如何在无符号基 16数字和有符号基 10数字之间进行转换?
例如
5d0cfa30041d4348 <-> 6705009029382226760
024025978b5e50d2 <-> 162170919393841362
fb115bd6d34a8e9f <-> -355401917359550817
顺便说一句,它们实际上是某些项目的 ID。在内部,它们都是 64 位数字,但在两个演示文稿中。
我可以使用任何课程吗?
谢谢
如果基数为 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 来表示扫描是否成功。如果使用字符串,最好检查扫描是否成功。