我需要在java中以相同的方式创建一些随机数据。就像下面的代码片段一样。
ByteBuffer bb = ByteBuffer.allocate(16);
bb.putDouble(0, Math.random());
bb.putDouble(8, Math.random());
字符串输入 = Hex.encodeHexString(bb.array());
如何在 iOS(Swift 或 Objective-C)中执行相同的操作以及 iOS 中 ByteBuffer 的等效项是什么?
最佳答案
我相信您正在寻找的对象是数据
。它是一个可以表示任何数据并保存原始字节缓冲区的对象。
对于您的具体情况,您需要将 double 值数组转换为数据,可以像这样完成:
let data: Data = doubleArray.withUnsafeBufferPointer { Data(buffer: $0) }
现在要从Data
获取十六进制字符串,我建议您引用some other post .
添加此答案代码,您应该能够通过执行以下操作来构造十六进制字符串
let hexString = data.hexEncodedString()
所以把它们放在一起你会这样做:
extension Data {
struct HexEncodingOptions: OptionSet {
let rawValue: Int
static let upperCase = HexEncodingOptions(rawValue: 1 << 0)
}
func hexEncodedString(options: HexEncodingOptions = []) -> String {
let format = options.contains(.upperCase) ? "%02hhX" : "%02hhx"
return map { String(format: format, $0) }.joined()
}
}
func generateRandomDoubleBufferHexString(count: Int, randomParameters: (min: Double, max: Double, percision: Int) = (0.0, 1.0, 100000)) -> String {
func generateRandomDouble(min: Double = 0.0, max: Double = 1.0, percision: Int = 100000) -> Double {
let scale: Double = Double(Int(arc4random())%percision)/Double(percision)
return min + (max-min)*scale
}
var doubleArray: [Double] = [Double]() // Create empty array
// Fill array with random values
for _ in 0..<count {
doubleArray.append(generateRandomDouble(min: randomParameters.min, max: randomParameters.max, percision: randomParameters.percision))
}
// Convert to data:
let data: Data = doubleArray.withUnsafeBufferPointer { Data(buffer: $0) }
// Convert to hex string
return data.hexEncodedString()
}
关于java - Swift 或 Objective C 中的 java ByteBuffer 等价于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52274377/