Skip to main content
 首页 » 操作系统

random之如何在 Swift 中读取/dev/random

2024年01月01日37jillzhang

我找不到如何在 Swift 中打开文件的示例,特别是从/dev/random 读取真正随机数到数组中。 谢谢

请您参考如下方法:

要回答有关读取文件的问题,您需要使用 NSFileManager。 Swift 没有自己的文件 API。另外,您不能简单地打开文件;您需要使用文件处理程序,因为 /dev/random 将永远保持输出。

这是一个例子:

let manager = NSFileManager.defaultManager() 
let randomPath = "/dev/random" 
 
if manager.fileExistsAtPath(randomPath) { 
    let handle = NSFileHandle(forReadingAtPath: randomPath) 
 
    if let validHandle = handle { 
        let desiredLength = 256 
 
        // Warning: Instead of returning NSData?, this method throws an exception if there's an error. Consider adding additional error handling. 
        let fileData = validHandle.readDataOfLength(desiredLength) 
        let fileString = NSString(data: fileData, encoding: NSASCIIStringEncoding) 
        if (fileString != nil) { 
            println(fileString!) 
        } 
    }    
} 

示例控制台输出:

¬Ñ@<4r-ÐÛÍäÓ-(*Âý3o÷-»e2 @äÂx<øWýsñniâõãQüÕ£ÆsûÄÏþDÊU²OÑ9H)úûÓWhAóûoκfßpÍC%M¤ò«ÿ@'-gVüü]®%åYÒ{»j>䩿¨Zì¿¿Bþxû,«1´£¾E¸Ju|`ëérßNeòWÙé-î#ê05¿ JF-Ëë«î=¤<5ë/p¨¾üæü5è«î%ãå.öŪ¿¯¨ôø+EeÅþUå5ì%ÿ¼pÕÊ:oÐ

也就是说,如果您的意图是在数组中加载随机数,您应该只使用 arc4random_uniform(),它将返回一个均匀分布的随机数:

var randomNumbers = [Int]() 
 
for i in 1...10 { 
    randomNumbers.append(Int(arc4random_uniform(1000))) 
} 
 
println(randomNumbers) 

示例输出:

[27, 796, 150, 439, 955, 678, 556, 816, 571, 130]