others - 将 Objective C 方法转换为 NSInputStream ( 将字节转换为 double )

  显示原文与译文双语对照的内容
0 0

我在 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);

时间: 原作者:

0 0

这应该可以工作:


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

解释: withUnsafeMutablePointer() 使用惟一参数( shorthand 表示法中的$0 ) 设置为 value 地址来调用闭包( 块) 。

$0UnsafeMutablePointer<Double> 类型,read() 需要 UnsafeMutablePointer<UInt8> 作为第一个参数,因此需要另一个转换。 然后将闭包的返回值分配给 num

原作者:
...