我正在用Swift编写MsgPack解析器,作为学习该语言的一种方式。感觉不太适合任务,但我一直在进步。现在,我遇到了一个块,在其中似乎无法说服它将4个字节转换为浮点数。
var bytes:Array<UInt8> = [0x9A, 0x99, 0x99, 0x41] //19.20000
var f:Float = 0
memccpy(&f, &bytes, 4, 4)
print(f)
在操场上,我得到:
致命错误:无法打开可选。没有游乐场执行失败:错误:执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)。
有什么想法下一步可以尝试吗?
掉落&
的&bytes
。bytes
是一个数组。
var bytes:Array<UInt8> = [0x9A, 0x99, 0x99, 0x41] //19.20000
var f:Float = 0.0
memccpy(&f, bytes, 4, 4) // as per OP. memcpy(&f, bytes, 4) preferred
println ("f=\(f)")// f=19.2000007629395
更新Swift 3
memccpy
在Swift 3中似乎不起作用。正如评论员所说,请使用memcpy
:
import Foundation
var bytes:Array<UInt8> = [0x9A, 0x99, 0x99, 0x41] //19.20000
var f:Float = 0.0
/* Not in Swift 3
memccpy(&f, bytes, 4, 4) // as per OP.
print("f=\(f)")// f=19.2
*/
memcpy(&f, bytes, 4) /
print("f=\(f)")// f=19.2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句