将PoolByteArray转换为float

程序员

我的代码当前基于IEEE 754规范手动计算单精度浮点数。但是,在像C这样的语言中,整个操作实际上是a nop是否有更好(更快)的方式进行此转换?

func bin2float(pkt:PoolByteArray) -> float:
    #Convert packet to an array of bools
    var arr:Array=[]
    for byte in pkt:
        for _i in range(0,8):
            arr.append(byte%2)
            byte/=2
            
    #Extract sign
    var r_sign:int
    if arr[31]==1:
        r_sign=-1
    else:
        r_sign=1
    
    #Extract exponent
    var r_exp:int=0
    for i in range(30,22,-1):
        r_exp*=2
        r_exp+=arr[i]
    r_exp-=127
    
    #Extract mantissa
    var r_mant:float=0
    for i in range(0,23):
        r_mant+=arr[i]
        r_mant/=2
    r_mant+=1
    
    return r_sign*pow(2,r_exp)*r_mant

我尝试使用某些数据包类,但它们似乎需要使用整个协议设置。

程序员

StreamPeerBuffer可用于执行转换,通过写入字节到它,一个然后检索的浮子。

func bin2float(pkt:PoolByteArray) -> float:
    var buff = StreamPeerBuffer.new()
    buff.data_array = pkt
    return buff.get_float()

资料来源:https : //godotengine.org/qa/81109

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章