为了账号安全,请及时绑定邮箱和手机立即绑定

Swift 或 Objective C 中 java ByteBuffer 的等价物是什么?

Swift 或 Objective C 中 java ByteBuffer 的等价物是什么?

潇湘沐 2021-09-12 20:31:06
我需要在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 的等价物是什么?
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

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


对于您的特定情况,您需要将 double 值数组转换为数据,可以这样做:


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

}


查看完整回答
反对 回复 2021-09-12
  • 1 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信