这是我的代码,用于将字节数据转换为浮点数。我尝试了本网站给出的所有答案。我正在获取此“ <44fa0000>”字节数据的指数值
static func returnFloatValue(mutableData:NSMutableData)->Float
{
let qtyRange = mutableData.subdataWithRange(NSMakeRange(0, 4))
let qtyString = String(qtyRange)
let qtyTrimString = qtyString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
let qtyValue = Float(strtoul(qtyTrimString, nil, 16)/10)
return qtyValue
}
谢谢
<44fa0000>
是二进制浮点数的 big-endian
内存表示形式2000.0
。要从数据中获取数字,您必须UInt32
先将其读入,从big-endian转换为主机字节序,然后将结果转换为a
Float
。
在 Swift 2 中
func floatValueFromData(data: NSData) -> Float {
return unsafeBitCast(UInt32(bigEndian: UnsafePointer(data.bytes).memory), Float.self)
}
例:
let bytes: [UInt8] = [0x44, 0xFA, 0x00, 0x00]
let data = NSData(bytes: bytes, length: 4)
print(data) // <44fa0000>
let f = floatValueFromData(data)
print(f) // 2000.0
在 Swift 3中, 您可以使用Data
代替NSData
,而 unsafeBitCast
可以用Float(bitPattern:)
初始化程序代替:
func floatValue(data: Data) -> Float {
return Float(bitPattern: UInt32(bigEndian: data.withUnsafeBytes { $0.pointee } ))
}
在 Swift 5中
,使用(untyped)调用闭包的withUnsafeBytes()
方法,您可以从原始内存中获取值:Data``UnsafeRawBufferPointer``load()
func floatValue(data: Data) -> Float {
return Float(bitPattern: UInt32(bigEndian: data.withUnsafeBytes { $0.load(as: UInt32.self) }))
}
问题内容: 我有一个必须解析的二进制文件,并且正在使用Python。有没有办法占用4个字节并将其转换为单个精度浮点数? 问题答案:
问题内容: 我知道如何在Java中执行此操作,但是找不到Java的ByteBuffer的快速等效项,因此也找不到它的.putDouble(double value)方法。 基本上,我正在寻找这样的功能: 问题答案: typealias Byte = UInt8 但是结果与您的期望相反(由于字节顺序): 添加: 对于Xcode8 / Swift3.0: 对于Xcode8.1 / Swift3.0.1
问题内容: 我正在尝试将a 转换为原始类型,反之亦然: 奇怪的是,当我尝试将新分配的分配回a时,结果不过是垃圾。 但是,当我使用原始数据类型作为参数时,似乎相同的算法工作得很好。 问题答案: 改用这些。
问题内容: 这是我正在查看的内容: 因此,我知道不能完全用二进制表示“ p” 1.15的十进制值。 因此,大的十进制大“ bdp”输出对我来说非常有意义……这是浮点数的实际值。 问题1 当浮点数“ p”转换回字符串以进行输出(如1.15)时,如何四舍五入(从内部1.149..375到1.15)? 在文档中的什么地方指定?toString javadoc并没有真正帮助(至少对我来说)。 我在语言规范
我看到的是: 所以我知道“p”1.15的十进制值不能用二进制来精确表示。 所以大的十进制“bdp”输出对我来说非常有意义……这是浮点数的实际值。 问题 1 当浮点数“p”转换回字符串以进行输出(如 1.15)时,该舍入如何/在何处发生(从内部 1.149..375 值转换为 1.15)? 它在文档中的哪个位置指定?托斯特林爪哇并没有真正的帮助(至少我)。 我确实在语言规范中看到了这一点: 浮点和双
问题内容: 正如标题所说。我不认为有可能这样做,但如果可以告诉我。 这是我正在编写的bukkit(minecraft服务器)插件所必需的。我要执行一个命令:tnt [power]。电源是我想转换为浮点数的返回字符串。 谢谢 问题答案: 用于进行转换。 和之间的区别只是回报。如果需要(对象),请使用前者;如果要数字,请使用后者。