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一个新的缓冲区。
参数是一个缓冲区。 这是为我工作。 我仍然不明白为什么我的例子不工作。