2016-04-27 19 views
1

Ich habe folgendes Objekt in JavaScript:Converting-Datenstruktur in Binärdaten

var arr = { 
    'id': 23, // uint32 
    'login': 'some string' // char[16] 
}; 

Ich möchte dieses Objekt in binäre Daten (array-Puffer) konvertieren und es an einen Server zu senden. Ich habe mit so etwas wie dies kommen:

var buffer = new ArrayBuffer(36); 
var idView = new Int32Array(buffer, 0, 1); 
idView[0] = 23321; 
var loginView = new Int16Array(buffer, 4, 16); 
loginView = "Random username"; 

So habe ich 4 Byte (1 int32) in idView variabel und 32 Byte (16 int16) in loginView variabel.

Ich möchte als binäre Daten, die sie über Ajax schicken, aber wenn ich serverseitige Prüfbytes arr Ich erhalte:

[25 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

, die schlicht falsch ist. Was ist los mit dir?

Antwort

0

Das ist eine vollkommen korrekte Ausgabe.

Seit Buffer in Node.js is basically a Uint8Array, können Sie Uint8Array als Debug-Ansicht verwenden:

var debugView = new Uint8Array(buffer); 

console.log(debugView); // [25, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

eine Zeile im Code gibt es das tut, was Sie vielleicht nicht erwarten:

loginView = "Random username"; 

Es ordnet einfach nur StringloginView und füllt den Puffer nicht mit ganzen Zahlen.

Was Sie vielleicht tun möchten, ist dies:

"Random username".split('').forEach((x, i) => loginView[i] = x.charCodeAt(0)); 

Offenbar ist es nicht möglich Zeichen zuweisen Arrays entweder eingegeben haben.