let length = 2048
let bytes = [UInt32](count: length, repeatedValue: 0).map { _ in arc4random() }
let data = NSData(bytes: bytes, length: bytes.count * sizeof(UInt32))
雨燕3号
let bytes = [UInt32](repeating: 0, count: length).map { _ in arc4random() }
let data = Data(bytes: bytes, count: length)
import Security
func randomBytes(length: Int) -> Data {
var data = Data(capacity: length)
data.withUnsafeMutableBytes { (bytes: UnsafeMutablePointer<UInt8>) -> Void in
let _ = SecRandomCopyBytes(kSecRandomDefault, length, bytes)
}
return data
}
Swift 5更新:**
func randomBytes(length: Int) -> Data? {
var data = Data(count: length)
let result = data.withUnsafeMutableBytes {
SecRandomCopyBytes(kSecRandomDefault, length, $0.baseAddress!)
}
guard result == errSecSuccess else {
return nil
}
return data
}
9条答案
按热度按时间0vvn1miw1#
你可以创建一个202^20b的
NSData
对象,然后用arc4random()
将一个随机的4字节整数附加到它上面202^20/4次,我相信你需要包含stdlib.h
(通过Generating random numbers in Objective-C)。c2e8gylq2#
字节不是“随机”的,但是会包含垃圾值(在运行之前堆上的任何东西)。优点是它的速度快,代码简洁。
1wnzp6jl3#
下面是一个3行的swift版本:
雨燕2
雨燕3号
rpppsulh4#
您可以考虑使用
CommonCrypto
中的CCRandomGenerateBytes
函数来生成随机数据。7lrncoxx5#
雨燕3:
感谢this帖子。
nwo49xxi6#
使用
arc4random_buf
用随机字节填充缓冲区目标-C
xnifntxz7#
原来的版本有一个错误,但我的照顾,希望不会引入任何新的一个。希望它的帮助。
下面是它的单元测试:
7gyucuyw8#
铀的效率更高。
下面是生成随机缓冲区的类别:
r1zk6ea19#
我已经在github开源了我的JFRandom类,它可以做到这一点。这里有一篇博客文章演示了如何获得/使用它来实现你的目标...
http://jayfuerstenberg.com/devblog/generating-random-numbers-strings-and-data-in-objective-c