2016-04-24 12 views
1

Ich möchte eine Ganzzahl (vorzeichenbehaftet) zu 32 Bit (Big Endian) in einen Oktettstream konvertieren und den Oktettstrom als Array-Wert für den Konstruktor Buffer Object geben.Javascript Konvertieren von int-Wert in Oktettstream Array

ich es in der Konsole zum Beispiel für den Wert schaffen kann -2000:

<code> 
buf = Buffer(4) 
buf.writeInt32BE(-2000) 
buf // is <Buffer ff ff f8 30> 
buf1 = new Buffer([0xff, 0xff, 0xf8, 0x30]) 
</code> 

Der Wert -3000 ist zum Beispiel -3000: 0xff, 0xff, 0xf4, 0x48

Aber der Rahmen Ich benutze akzeptiert nicht die writeInt32BE-Funktion und löst Ausnahme aus.

Wie kann ich einen 32-Bit-Integer-Wert in einen Octet-Array-Stream ohne writeInt32BE konvertieren?

Eine Funktion, die einen Wert akzeptiert und ein Array mit Oktettstream zurückgibt.

+0

'Buffer' ist ein globaler Knoten, nicht das Framework. Sie sollten also keine Ausnahme für '(Buffer instance) .writeInt32BE()' mit gültigen Parametern bekommen. Was _exact_ code verursacht die Ausnahme, läuft es in Node und was ist das Framework? – traktor53

Antwort

1

Mit einem 4-Byte-Array-Puffer, in eine Datenansicht konvertiert und setInt32 auf der Ansicht aufrufen scheint zu arbeiten. Dieser Ansatz unterstützt die Spezifikation der Formate Little Endian und Big Endian (Standard) unabhängig von der Maschinenarchitektur.

function bigEnd32(value) { 
    var buf = new ArrayBuffer(4); 
    var view = new DataView(buf); 
    view.setInt32(0, value); 
    return view; 
} 

// quick test (in a browser) 
var n = prompt("Signed 32: "); 
var view = bigEnd32(+n); 
for(var i = 0 ; i < 4; ++i) 
    console.log(view.getUint8(i)); 

Dokumentation befindet war auf der Suche nach „MDN Arraybuffer“ „MDN Dataview“ usw. Schauen Sie sich DataView im Detail für Eigenschaften, die den zugrunde liegenden Array-Puffer zugreifen - Sie können in der Lage sein, den Code optimieren Sie Ihre Anwendung Hotel.

+0

wenn ich es mit getInt32 (i) drucke es verursacht RangeError: eigentlich möchte ich konvertieren -2000 –

+0

der zugrunde liegende Puffer enthält 4 Oktetts. 'view.getInt32 (0)' gibt seinen Wert als 32-Bit-Integer zurück. Wenn Sie einen Wert ungleich Null an getInt32 übergeben, wird ein Bereichsfehler verursacht. '+ n' im Testcode konvertiert eine Zeichenfolge in eine Zahl, nicht eine negative Zahl in eine positive. -2000 gibt 0xff 0xff 0xf8 0x30 wie erwartet. – traktor53

Verwandte Themen