什么是android ByteBuffer.wrap(data.getFloat())的swift等价物?

什么是android ByteBuffer.wrap(data.getFloat())的swift等价物?,android,ios,swift,Android,Ios,Swift,我正在从事一个项目,在这个项目中,我必须从设备中读取数据,然后将其转换为字节数组,然后读取一些字节(4字节),并将它们转换为浮点值并使用它。我的代码在android中运行良好,但我无法正确转换代码。这是android代码 try { byte[] data = Arrays.copyOfRange(mScanRecord, 5, 9); //mScanRecord is byte array (byte[]) containing 11 byte sear

我正在从事一个项目,在这个项目中,我必须从设备中读取数据,然后将其转换为字节数组,然后读取一些字节(4字节),并将它们转换为浮点值并使用它。我的代码在android中运行良好,但我无法正确转换代码。这是android代码

try {
          byte[] data = Arrays.copyOfRange(mScanRecord, 5, 9); //mScanRecord is byte array (byte[]) containing 11 byte
          searchModel.setData("" + ByteBuffer.wrap(data).getFloat());
    } catch (Exception e) {
          e.printStackTrace();
          searchModel.setData("" + 0);
    }
这是我用swift转换的代码

typealias Byte = UInt8

func fromByteArray<T>(_ value: [UInt8], _: T.Type) -> T {
    return value.withUnsafeBytes {
        $0.baseAddress!.load(as: T.self)
    }
}

func getUnitValue(byteArray:[UInt8]) -> Float {
    let value = fromByteArray([byteArray[7], byteArray[8], byteArray[9], byteArray[10]], Float.self)

    return value
}

..... In Some function I call .....
searchModel.setData(data: String(format: "%.10f", getUnitValue(byteArray: byteArray)))
在Android中


值看起来不同,但如果将它们转换为十进制到十六进制,则它们是相同的。字节数组包含32位的大端表示形式 浮点值。您必须将其转换为主机字节顺序 (在当前所有苹果平台上都是little endian):


字节数组包含32位字节的大端表示 浮点值。您必须将其转换为主机字节顺序 (在当前所有苹果平台上都是little endian):


在我的例子中,浮点数是小尾端,我改变了这一行:

return Float(bitPattern: UInt32(littleEndian: value))

在我的例子中,浮点数是小尾端,我改变了这一行:

return Float(bitPattern: UInt32(littleEndian: value))

字节数组包含什么?你得到了什么样的结果?你期望得到什么您的Java代码还复制了字节5..8,Swift从数组中复制了字节7..10。@MartinR I更新了问题中的期望值,Java代码复制了5,6,7,8,Swift复制了7,8,9,10,因为Java中的字节数组长度是11字节,而在ios中是13字节,一开始,我在安卓系统中又得到了2个字节,所以我必须从7中选择值,字节数组包含什么???@MartinR补充了这个问题:字节数组包含什么?你得到了什么样的结果?你期望得到什么您的Java代码还复制了字节5..8,Swift从数组中复制了字节7..10。@MartinR I更新了问题中的期望值,Java代码复制了5,6,7,8,Swift复制了7,8,9,10,因为Java中的字节数组长度是11字节,而在ios中是13字节,一开始,我在安卓系统中又得到了2个字节,所以我必须从7中选择值,字节数组包含什么内容???@MartinR补充了这个问题
return Float(bitPattern: UInt32(littleEndian: value))