【发布时间】:2018-03-06 14:10:45
【问题描述】:
我正在通过网络传输字节。这些字节源自 C float[] 数组。
node.js 服务正在接收字节,但是对于从 Buffer 到正确浮点数/双精度数组的转换,我有点难过。
一些在线资源提供了一些帮助,但数字并不正确。大多数情况下,它们不是很长的整数就是很长的浮点数。
float 数组的长度为 32。
更新
根据请求,这是 node.js 到达时的缓冲区:
<Buffer 00 50 4f d7 06 70 77 bf ca 24 d7 bf 00 00 00 00 00 00 00 00
00 00 00 00 0b d7 23 3c 00 00 00 00 a6 9b c4 3c a4 70 3d 3f 0a d7 23 3c
00 00 00 00 00 00 ... >
这是buf.toString()之后的缓冲区
PO�pw��$
�#<���<�p=?
�#<�@
ף<ff�?
�#=�A
输出应如下所示:
output = [1.23, 4.56, -0.23, 0.02, 1.22, ...] <length=32>
更新 #2
根据要求,这里有一些发送方/接收方的代码。
发送方(C 应用程序):
float tmp[] = { var1, var2, var3, var4, ..., var32 }
byte * b = (byte *) &tmp;
Serial.write(b, 32 * sizeof(float));
接收方(node.js):
// Using ByteLength parser @ 32 * 4 bytes length
parser.on('data', (data) => console.log(data))
【问题讨论】:
-
这可能需要更多信息。您说“大多数情况下,它们要么是非常长的整数,要么是以 e-41 或类似结尾的长浮点数。” - 那是资源还是你的数字?尝试一个只有一个数字的数组并让它工作。你知道浮点数有多大(以字节为单位)吗?我想你的意思是它有 22 个数字?
-
当您在 node.js 中查看字节时,它们会是什么样子。十六进制转储就可以了。
-
与其描述输出,不如发布真实的输出及其预期值以增加清晰度。
-
标题中的
Float23是Float32或Float22(以某种方式指代数组的大小)还是其他什么的拼写错误? -
这太宽泛了。您使用什么协议来传输数据?
标签: javascript c node.js floating-point buffer