2015-05-13 59 views
1

嘿傢伙我試圖產生一個隨機的6字節長的十六進制,但我有問題。我得到的錯誤是:「整數文字存儲到'UInt32'時溢出」。如何在Swift中生成隨機長十六進制?

這裏是我的代碼:

var baseInt = UInt64(arc4random() % 281474976710655) 
var str = String(format: "%06X", baseInt) 
println("\(str)") 

任何幫助嗎?

+0

'arc4random'是32位將三個16位的號碼,並將其粘貼在一起 – Amadan

+0

感謝@Amadan但代碼與較低的整數,我測試了它? ,但是沒有我需要的那麼長的一個,所以我必須使用該代碼,只需要擺脫那個我不知道如何的錯誤。 –

+0

再次,['arc4random'](https://developer.apple .com/library/mac/documentation/Darwin/Reference/ManPages/man3/arc4random.3.html)生成32位數字,你可以先將'arc4random()'結果升級到'UInt64' *然後*得到一個模,但你總會得到像'00XXXX'這樣的數字,只是因爲沒有足夠的位在'arc4random'的結果給你你想要的。這就像問:「我如何以每天200卡路里的速度生存下來?我可以做一個小時,所以我只需要讓它在更長的時間內工作,但我不知道如何。」 – Amadan

回答

1

正在關注@Amadan的建議我明白了。

var baseIntA = Int(arc4random() % 65535) 
var baseIntB = Int(arc4random() % 65535) 
var str = String(format: "%06X%06X", baseIntA, baseIntB) 
println("\(str)") 

然後輸出:「009DD7004974

+0

你應該避免使用arc4random() –

+0

你會建議什麼? –

+3

let baseIntA = Int(arc4random_uniform(UInt32(UInt16.max))) –

相關問題