将Objective-C方法转换为NSInputStream的Swift(将字节转换为双精度)

Bagusflyer

我在Objective-C中有以下代码:

- (double)readDouble
{
    double value = 0.0;

    if ([self read:(uint8_t *)&value maxLength:8] != 8)
    {
        NSLog(@"***** Couldn't read double");
    }

    return value;
}

有用。但是我不知道如何将其转换为Swift。这是我的代码:

public func readDouble() -> Double {

    var value : Double = 0.0

    var num = self.read((uint8_t *)&value, maxLength:8) // got compiling error here!
    if num != 8 {

    }
}

错误消息是:

无法使用类型为'($ T4,maxLength:IntegerLiteralConvertible)'的参数列表调用'&'

有人可以帮忙吗?谢谢

我正在使用的测试数据(1.25):

14 AE 47 E1 7A 14 F4 3F

更新:

一个简单的c解决方案,但是如何在Swift中做到这一点?

double d = 0;
unsigned char buf[sizeof d] = {0};

memcpy(&d, buf, sizeof d);
马丁·R

这应该工作:

let num = withUnsafeMutablePointer(&value) {
    self.read(UnsafeMutablePointer($0), maxLength: sizeofValue(value))
}

说明withUnsafeMutablePointer()调用闭包(块),将唯一的参数($0以简写表示)设置为的地址value

$0具有类型UnsafeMutablePointer<Double>read()期望将aUnsafeMutablePointer<UInt8>作为第一个参数,因此必须进行另一次转换。然后将闭包的返回值分配给num

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章