【问题标题】:How to convert b'\xc8\x00' to float?如何将 b'\xc8\x00' 转换为浮点数?
【发布时间】:2023-04-07 11:13:02
【问题描述】:

我实际上从温度传感器获得了一个值 (b'\xc8\x00')。我想将其转换为浮点值。对吗,我需要解码它吗?

这是我的功能:

def ToFloat(data):
    s = data.decode('utf-8')
    print(s)
    return s

但是当我尝试编译它时,我得到了错误:

'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte

【问题讨论】:

  • 您预计最终的值大约是多少?将两个字符转换为数字的方法有上百万种,如果我们知道您的温度计是放在烤箱里、客厅里还是南极洲里,这将有助于缩小范围。
  • 编译?在蟒蛇?你认为 str.decode 应该做什么?您似乎试图转换为浮点数的字符串是什么?
  • b'\xc8\x00' 代表什么浮点值?它是一种什么样的浮点表示?这不是一种常见的 IEEE 格式,至少需要 4 个字节的数据,所以只有两个字节是不够的。如果您知道表示形式,那么 struct 模块似乎是可以使用的。

标签: python python-3.x floating-point type-conversion decode


【解决方案1】:

您似乎有压缩字节而不是 unicode 对象。使用struct.unpack:

In [3]: import struct
In [4]: struct.unpack('h', b'\xc8\x00')[0]
Out[4]: 200

格式h 指定一个短值(2 个字节)。如果您的温度值始终为正值,您可以使用H 表示无符号短:

import struct

def to_float(data):
    return float(struct.unpack('H', data)[0])

【讨论】:

    【解决方案2】:

    注意ToFloat() 有点烦人,因为它返回一个浮点数,但将数据解释为整数值。如果字节表示浮点数,则有必要知道浮点数以哪种格式打包到这两个字节中(通常浮点数需要两个以上字节)。

    data = b'\xc8\x00'
    def ToFloat(data):
        byte0 = int(data[0])
        print(byte0)
        byte1 = int(data[1])
        print(byte1)
        number = byte0 + 256*byte1
        print(number)
        return float(number)    
    

    返回:200.0 似乎是合理的。如果没有,只需查看数据的含义并进行相应处理。

    【讨论】:

      猜你喜欢
      • 2022-08-04
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      相关资源
      最近更新 更多