java - Swift 或 Objective C 中的 java ByteBuffer 等价于什么?

标签 java ios objective-c swift

我需要在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/

相关文章:

ios - 在 Objective-C 中反转字符串数组

java - 字符串的正则表达式,应允许 <String>(<String>,<String>), java 中的模式

java - IE11 : Error 400 only on specific server

android - 无密码应用程序登录

iOS/swift/ Storyboard : Add PageViewController using only *part* of screen?

ios - 如何通过 Post 方法使用 JSON 模型将 JSON 字典作为参数传递?

objective-c - self 释放后

java - junit数组不等于测试

Java ExecutorService 无法在执行服务器时关闭

ios - Fabric 发布 Xcode 6.3 协同设计 xcode-select