无法从 long 转换为 float

Can not able to convert float from long

我有可以从 unsigned 字节流转换 signed 值的代码。我能够做到这一点。但是,当我试图将它转换为 float 时,它不能简单地转换,而是四舍五入到下一个 int 值。以下是我的代码:

def byte2int(bstr, width=32):
    """
    Convert a byte string into a signed integer value of specified width.
    """
    val = sum(ord(b) << 8*n for (n, b) in enumerate(reversed(bstr)))
    if val >= (1 << (width - 1)):
        val = val - (1 << width)
    return val

str1=('\x00\xff\xa6\x10\xff\xff\xa6\x11\xff\xff\xa6\x12\xff\xff\xa6\x13\xff\xff\xa6\x12\xff\xff\xa6\x11\xff\xff\xa6\x10\xff\xff\xa6\x09\xff\xff\xa6\x08')
res=['','','','','','']
k=4
for l in range(0,6):
    for i in range (0,4):
        res[l]+= str1[i+4*l+k]

Ch1 = (byte2int(res[0]))
print Ch1
print (type(Ch1))
print float(Ch1/100)

这段代码的结果如下:

-23023
<type 'long'>
 -231.0`

但我想以 -230.23 格式显示。任何人都可以指导我。

您必须使用字节类型和模块"struct"
请尝试以下操作:

import struct    
struct.unpack('f', b'\x00\xff\xa6\x10')

并查看帮助(结构)以获取有关转换格式的更多信息

将 int 100 更改为 long 100.0。这会起作用。看最后一行代码:

def byte2int(bstr, width=32):
"""
Convert a byte string into a signed integer value of specified width.
"""
val = sum(ord(b) << 8*n for (n, b) in enumerate(reversed(bstr)))
if val >= (1 << (width - 1)):
    val = val - (1 << width)
return val
str1=('\x00\xff\xa6\x10\xff\xff\xa6\x11\xff\xff\xa6\x12\xff\xff\xa6\x13\xff\xff\xa6\x12\xff\xff\xa6\x11\xff\xff\xa6\x10\xff\xff\xa6\x09\xff\xff\xa6\x08')
res=['','','','','','']
k=4
for l in range(0,6):
    for i in range (0,4):
        res[l]+= str1[i+4*l+k]

Ch1 = (byte2int(res[0]))
print Ch1
print (type(Ch1))
print float(Ch1/100.0)