2012-02-10 37 views
2

我需要將值1393443048683555715轉換爲HEX。但是,首先,例如,我不能使用NSLog()將其顯示爲十進制數。在Objective-C中使用大數字嗎?

好,它的工作原理:

NSLog(@"%qu", 1393443048683555706); 

但對於轉換爲十六進制。我必須用什麼類型來存儲這個大的價值?

NSLog([NSString stringWithFormat: @"%x", 1393443048683555706]); 
// result eb854b7a. It's incorrect result! 

,但我忘了說,表示爲字符串@「1393443048683555706」這個大數字(不是int)

+0

爲什麼不把它轉換爲字符串? – 2012-02-10 17:12:51

+0

由於所有的數字都是二進制形式,我想你需要一個十六進制數字的字符串表示,對吧?那麼'[NSString stringWithFormat:@「%x」,someInteger]'? – Costique 2012-02-10 17:45:10

+0

它給出了不正確的結果 – leaf 2012-02-10 17:50:41

回答

1

中的「x」格式說明爲32位數字;您需要使用「qx」或「qX」(取決於您希望字母值是否大寫)。這些是無符號長長值格式化,請參閱:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1

接下來,你不應該通過你在上面直接完成NSLog的字符串 - 這可能會導致系統崩潰。

NSLog(string); // bad!! 
NSLog(@"%@", string); // good 

所以,如果你的價值是作爲一個字符串,你想這樣做:

NSString *longNumber = @"1393443048683555706"; 
NSLog(@"%qx", [longNumber longLongValue]); 

如果字符串值不能強制轉換爲數字,longLongValue將返回0。我將留給你處理錯誤(和界限)檢查 - 詳情請參閱NSString

如果你想保存的十六進制值作爲一個字符串,這樣做:

NSString *hexRepresentation = [NSString stringWithFormat:@"%qx", [longNumber longLongValue]]; 

再次,最好的照顧錯誤處理。

+0

thanq。完美答案:) – leaf 2012-02-10 19:53:49

2

您可以使用%qi%qu格式說明與NSLog顯示64位整數。您的恆定出現以適應64位有符號數,其中的界限:

[−9223372036854775808 to 9223372036854775807]