我在 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: 的参数列表调用 '&'
整数常量可转换)'
有人可以帮忙吗?谢谢
我正在使用的测试数据(1.25):
14 AE 47 E1 7A 14 F4 3F
UPDATE:
一个简单的 C 解决方案,但如何在 Swift 中做到这一点?
double d = 0;
unsigned char buf[sizeof d] = {0};
memcpy(&d, buf, sizeof d);
这应该有效:
let num = withUnsafeMutablePointer(&value) {
self.read(UnsafeMutablePointer($0), maxLength: sizeofValue(value))
}
解释: withUnsafeMutablePointer()
使用唯一的参数调用闭包(块)
($0
以简写形式)设置为地址value
.
$0
有类型UnsafeMutablePointer<Double>
and read()
期望一个UnsafeMutablePointer<UInt8>
作为第一个参数,因此另一个转换
是必要的。然后将闭包的返回值分配给num
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)