Python Socket Received ASCII 转换为实际数字( float )

标签 python python-2.7

在使用 Python 套接字连接时,我从服务器(模拟器)收到以下信息:

'C\xbc\x7fZC\xbc\x7f5C\xbc\x7f&C\xbc\x7f!C\xbc\x7f\x14C\xbc\x7f\x16C\xbc\x7f!C\xbc\x7f\x12C\xbc\x7f\x19C\xbc\x80\x03C\xbc\x81~C\xbc\x80FC\xbc\x7f\xd1C\xbc~\xcdC\xbc~\xd7C\xbc\x7f$;4\xe0\xb8;\x81\xf6\xd7;R\xf4T:\xc5v\xb4:\xc1>\xc1:\xd9\x15\x9a:\xa8M7;K\xde{:\xfb\\\xcd\xbc\tR\xd4\xba\xe1\xb6\xf3\xbb\xc9\xb8\xf4\xbby\x8a\x199\x9dH\x009\x0cp\x00:\xeb<\x00'

但我的实际输出应该是(尺寸 32x1):

376.99493   376.99380   376.99335   376.99319   376.99280   376.99286
376.99319   376.99274   376.99295   377.00009   377.01166   377.00214
376.99857   376.99063   376.99094   376.99329   0.0027599763
0.0039661932    0.0032189088    0.0015065284    0.0014743434
0.0016562224    0.0012840395    0.0031107950    0.0019177437
-0.0083815642   -0.0017220661   -0.0061560813   -0.0038076697
0.00029999018   0.00013393164   0.0017946959

如何转换 ASCII 代码以在 Python 2.7 中获取这些数字。

最佳答案

要从套接字转换 float ,您可以使用 struct.unpack

代码:

num_floats = int(len(raw_data) / 4)
format_str = '>' + 'f' * num_floats
data = struct.unpack(format_str, raw_data[:num_floats * 4])

测试代码:

import struct

raw_data = b'C\xbc\x7fZC\xbc\x7f5C\xbc\x7f&C\xbc\x7f!C\xbc\x7f\x14C\xbc' \
           b'\x7f\x16C\xbc\x7f!C\xbc\x7f\x12C\xbc\x7f\x19C\xbc\x80\x03C' \
           b'\xbc\x81~C\xbc\x80FC\xbc\x7f\xd1C\xbc~\xcdC\xbc~\xd7C\xbc' \
           b'\x7f$;4\xe0\xb8;\x81\xf6\xd7;R\xf4T:\xc5v\xb4:\xc1>\xc1:\xd9' \
           b'\x15\x9a:\xa8M7;K\xde{:\xfb\\xcd\xbc\tR\xd4\xba\xe1\xb6\xf3' \
           b'\xbb\xc9\xb8\xf4\xbby\x8a\x199\x9dH\x009\x0cp\x00:\xeb'

num_floats = int(len(raw_data) / 4)
format_str = '>' + 'f' * num_floats
data = struct.unpack(format_str, raw_data[:num_floats * 4])

print(data)

结果:

(376.99493408203125, 376.9938049316406, 376.99334716796875,
 376.9931945800781, 376.9927978515625, 376.99285888671875,
 376.9931945800781, 376.99273681640625, 376.9929504394531,
 377.0000915527344, 377.01165771484375, 377.00213623046875,
 376.9985656738281, 376.9906311035156, 376.9909362792969, 
 376.9932861328125, 0.00275997631251812, 0.003966193180531263, 
 0.0032189087942242622, 0.001506528351455927, 0.0014743433566763997, 
 0.001656222390010953, 0.001284039462916553, 0.003110795048996806, 
 0.0019177338108420372, 4.2194070097596986e+21, 456834187264.0, 
 -7.263825409609126e-06, -0.00011669746163534, -7.377517891143851e-33, 
 131300.1875, 1.5874123484317317e+29)

关于Python Socket Received ASCII 转换为实际数字( float ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48482466/

相关文章:

python - 使用 Python 的 popen 将击键发送到子进程

python - 如何使用 __import__ 导入 *

python - 避免在 python 中将 < 字符写入 XML

python-2.7 - 导入错误: No module named google_compute_engine

python - 包含 """(三引号)的多行字符串

python - Keras - 火车结束回调没有得到任何日志

python - 我在这个乒乓球游戏中画了一个边界,但 Racket 可以越过它。我该如何阻止它?

django - 如何在 django rest 框架中对项目的删除 url 进行 url 反转

Python - 如何替换列表中的字符串?

python - Pygame:允许点击穿过窗口