【问题标题】:Python convert string repr of byte data into float dataPython将字节数据的字符串repr转换为浮点数据
【发布时间】:2016-01-06 00:01:09
【问题描述】:

我有 12 个字节通过用于表示 3 个浮点值的 Web 套接字发送。另一个程序这样做:

float m_floatArray[3]; 
...
Serial.write((byte*) m_floatArray, 12); //12 b/c 3 floats at 4 bytes each

我在 python 程序中收到的数据如下所示:

#the data is printed from: received = ser.read(12)  
received = '\xe4C\x82\xbd-\xe4-\xbe&\x00\x12\xc0'

我想在我的 python 程序中做这个:

x = getFirstFloat(received)
y = getSecondFloat(received)
z = getThirdFloat(received)

如何解析我的数据?谢谢。

【问题讨论】:

  • 这不是c,它是 AFAIK 一种专门用于 arduino 的语言,类似于 c++
  • 没错,更新了标签。
  • 不要硬编码大小,使用sizeof(m_floatArray)而不是12
  • @iharob 您评论的代码显然仅用于演示目的,您应该专注于 Python 部分。
  • P.S.答案是struct.unpack

标签: python arrays string arduino byte


【解决方案1】:

一个简短的例子:

>>> a,b,c = [random.random()*10 for i in range(3)]
>>> a
0.9446191909332258
>>> b
7.578277797297625
>>> c
8.061585451293366
>>> recieved = struct.pack('fff', a, b, c)
>>> recieved
'\x90\xd2q?@\x81\xf2@A\xfc\x00A'
>>> x,y,z = struct.unpack('fff', recieved)
>>> x
0.9446191787719727
>>> a
0.9446191909332258
>>> b
7.578277797297625
>>> y
7.578277587890625
>>> c
8.061585451293366
>>> z
8.061585426330566
>>>

请注意,您可能希望在 format string 中指定 byte order

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 2019-07-10
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多