Kann jemand erklären, wie ich einen Float (Vector3.x) in ein Byte-Array mit C# konvertieren und mit Knoten js dekodieren kann?Unity C# Konvertieren Float in Byte-Array und lesen mit Knoten js
Ich habe im Internet gelesen, dass Vector3.x ein System.Single Datentyp ist und 4 Bytes (32 Bits) verwenden. Ich benutze BitConverter, um es in ein Byte-Array zu konvertieren. Mit Nodejs benutze ich readFloatBE().
Ich weiß nicht, was ich falsch mache, aber ich bekomme ständig ein schlechtes Ergebnis mit Knoten js mit console.log().
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;
}
Knoten 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);
},
Wenn ich -2,5 senden, Einheit ausgegeben: 0 0 32 191 mit -1 Einheit Ausgang: 0 0 128 192
NodeJS Ausgang mit readFloatLE: 3.60133705331478e-43
Dokumentation zeigt - 'const buf = Buffer.from ([1,2,3,4,5,6,7,8]); buf.readDoubleBE(); // Rückgabe: 8.20788039913184e-304 buf.readDoubleLE(); // Rückgabe: 5.447603722011605e-270'. Aber ich weiß nicht warum. Ich bin neugierig. –
Vorsicht mit 'neuem Puffer (Größe)'. Das ist [veraltet] (https://nodejs.org/api/buffer.html#buffer_new_buffer_size) mit der neuesten Version von node. Es könnte * technisch * in Ordnung sein, da Sie sowieso die 4 Bytes überschreiben, aber ich wollte es aufbringen. – dvlsg
@MicahWilliamson Randnotiz: das sind nur die Zahlen vertreten. Was du machst, ist ein Puffer, der '0x0102030405060708' enthält, und die Doppelgänger, die du darstellst, sind das, was du in deinen Renditen siehst, abhängig davon, ob du sie als Big oder Little Endian liest. – dvlsg