gpt4 book ai didi

ios - 将 Objective-C 方法转换为 NSInputStream 的 Swift(将字节转换为 double )

转载 作者:可可西里 更新时间:2023-11-01 00:53:44 24 4
gpt4 key购买 nike

我在 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 {

}
}

错误信息是:

Cannot invoke '&' with an argument list of type '($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);

最佳答案

这应该有效:

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

解释:withUnsafeMutablePointer()用唯一的参数调用闭包( block )( $0 简写)设置为 value 的地址.

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

关于ios - 将 Objective-C 方法转换为 NSInputStream 的 Swift(将字节转换为 double ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25845574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com