我需要将1393443048683555715之类的值转换为HEX。但是,首先,我不能使用NSLog()将其显示为十进制,例如。
好的,它有效:
NSLog(@"%qu", 1393443048683555706);
但转换为HEX怎么样?我必须用什么类型来存储这个大价值?
NSLog([NSString stringWithFormat: @"%x", 1393443048683555706]);
// result eb854b7a. It's incorrect result!
但我忘了说这个大数字表示为字符串@“1393443048683555706”(不是int)
答案 0 :(得分:2)
您可以使用%qi
和%qu
格式说明符和NSLog
来显示64位整数。您的常量似乎符合64位有符号数,其限制为:
[−9223372036854775808 to 9223372036854775807]
答案 1 :(得分:1)
" x"格式说明符用于32位数字;你需要使用" qx"或" qX" (取决于您是否希望字母值为大写)。这些是无符号长long值的格式化程序,请参阅:
接下来,您不应该像上面那样将字符串直接传递给NSLog - 这可能会导致崩溃。
NSLog(string); // bad!!
NSLog(@"%@", string); // good
因此,如果您的值以字符串形式出现,那么您将要执行此操作:
NSString *longNumber = @"1393443048683555706";
NSLog(@"%qx", [longNumber longLongValue]);
如果字符串值不能强制转换为数字,则longLongValue将返回0.我将留给您处理错误(和边界)检查 - 有关详细信息,请参阅NSString
如果要将十六进制值保存为字符串,请执行以下操作:
NSString *hexRepresentation = [NSString stringWithFormat:@"%qx", [longNumber longLongValue]];
同样,最好注意错误处理。