无法从 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)
我有可以从 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)