繁体   English   中英

Swift或Objective C中的Java ByteBuffer等效于什么?

[英]What is equivalent of java ByteBuffer in Swift or Objective C?

我需要以相同的方式在Java中创建一些随机数据。 如下所示。

ByteBuffer bb = ByteBuffer.allocate(16); bb.putDouble(0, Math.random()); bb.putDouble(8, Math.random()); String input = Hex.encodeHexString(bb.array());

如何在iOS(Swift或Objective-C)中执行相同的操作?iOS中的ByteBuffer等效于什么?

我相信您要寻找的对象是Data 它是一个可以表示任何数据并保存原始字节缓冲区的对象。

对于您的特定情况,您需要将双精度值数组转换为数据,可以这样进行:

let data: Data = doubleArray.withUnsafeBufferPointer { Data(buffer: $0) }

现在,要从Data获取十六进制字符串,建议您参考其他文章

添加此答案代码,您应该可以通过执行以下操作构造十六进制字符串

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()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM