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

时间:2016-06-02 21:10:25

标签: c# node.js floating-point buffer bytearray

有人可以解释我如何使用c#将float(Vector3.x)转换为字节数组并使用节点js解码它吗?

我在网上看到Vector3.x是一个system.single数据类型,使用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

2 个答案:

答案 0 :(得分:1)

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

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中创建缓冲区的方法,尤其是(也使用-1进行测试和验证,但为了简洁起见,我将代码保留了。)

答案 1 :(得分:0)

感谢您的回复。

我在这里提出了同样的问题:Unity Questions

有人给我答案:

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

},

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

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