Unity C#将float转换为字节数组并使用节点js读取

有人可以解释我怎么可以将一个float(Vector3.x)转换为一个字节数组与c#和解码与节点js?

我在互联网上读到Vector3.x是一个单一的数据types,使用4个字节(32位)。 我使用BitConverter将其转换为一个字节数组。 用Nodejs我使用readFloatBE()。

我不知道我在做什么错,但是我用console.log()节点js得到了一个不好的结果。

Unity 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

这是从前到后的一组工作数据。

C#:

 Single fl = 2.5F; var bytes = System.BitConverter.GetBytes(fl); var str = BitConverter.ToString(bytes); // 00-00-20-40 

的NodeJS:

 let buffer = Buffer.from([ 0x00, 0x00, 0x20, 0x40 ]); let float = buffer.readFloatLE(); // 2.5 

注意我用来在nodejs中创build缓冲区的方法,尤其是(也用-1testing和validation的,但是为了简洁,我将代码closures了)。

感谢您的答复。

我在这里提出了同样的问题: 团结问题

有人给我答案使用:

  readFloat: function (offset, data) { return data.readFloatLE(offset); 

},

而是创build一个新的缓冲区。

参数是一个缓冲区。 这是为我工作。 我仍然不明白为什么我的例子不工作。