【发布时间】:2016-06-02 21:10:24
【问题描述】:
谁能解释我如何使用 c# 将 float(Vector3.x) 转换为字节数组并使用节点 js 对其进行解码?
我在网上看到 Vector3.x 是一个 system.single 数据类型,使用 4 个字节(32 位)。我使用 BitConverter 将其转换为字节数组。对于 Nodejs,我使用 readFloatBE()。
我不知道自己做错了什么,但是使用带有 console.log() 的 node js 经常会得到一个不好的结果。
统一 csharp:
public static int FloatToBit(int offset, ref byte[] data, Single number)
{
byte[] byteArray = System.BitConverter.GetBytes(number);
for (int i = 0;i<4;i++)
{
data[offset + i] = byteArray[i];
}
return 4;
}
节点js
readFloat: function (offset, data) {
var b = new Buffer(4);
for (var i = 0; i < 4; i++) {
b[i] = data[offset + i];
}
return data.readFloatLE(b, 0);
},
如果我发送 -2.5,统一输出为:0 0 32 191,-1 统一输出为:0 0 128 192
带有 readFloatLE 的 Nodejs 输出:3.60133705331478e-43
【问题讨论】:
-
文档显示-
const buf = Buffer.from([1,2,3,4,5,6,7,8]); buf.readDoubleBE(); // Returns: 8.20788039913184e-304 buf.readDoubleLE(); // Returns: 5.447603722011605e-270。但我不知道为什么。我自己很好奇。 -
小心
new Buffer(size)。那是 deprecated 与最新版本的节点。这可能技术上没问题,因为无论如何你都覆盖了 4 个字节,但我想提出来。 -
@MicahWilliamson 旁注:这些只是代表的数字。您正在制作的是一个包含
0x0102030405060708的缓冲区,它们所代表的双精度值是您在返回中看到的,这取决于您将它们读取为大端还是小端。
标签: c# node.js floating-point buffer bytearray