【问题标题】:Unity C# Convert float to byte array and read with node jsUnity C#将浮点数转换为字节数组并使用节点js读取
【发布时间】: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


【解决方案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 进行了测试和验证,但为简洁起见,我将代码省略了)。

【讨论】:

    【解决方案2】:

    感谢您的回复。

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

    有人给我答案使用:

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

    },

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-29
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 2010-09-05
      相关资源
      最近更新 更多