2017-05-11 1 views
-1

Ich bekomme Daten von C# TCP-Server, der mir Zeichenfolge gesendet. Der Zeichenfolge wird die Länge vorangestellt, die als Integer mit jeweils sieben Bits kodiert wird.node.js lesen Zeichenfolge mit 7 Bit codierte int Länge

Wie kann ich Länge in node.js analysieren

+0

Es ist leicht unklar. Kannst du bitte ein Beispiel geben. Für welche Länge ist das gedacht? Enthält die Zeichenfolge die Länge in Binär oder Denar? Verwendet die Länge eine feste Anzahl von Bits für ihre Darstellung oder ist sie variabel? –

+0

Geben Sie einen Beispielwert, den Sie erhalten, und was Sie daraus herausfinden möchten. Das würde machen, was Sie wollen, viel einfacher zu helfen. Im Moment klingt es so, als würde man fragen, wie man eine codierte Zeichenkette dekodiert, für die wir nicht die Regeln haben, wie sie codiert wurde. JavaScript hat binäre Operatoren und binäre Literale (wenn Sie sich auf einem aktuellen Knoten befinden), so dass Sie die Zeichenfolge in Bytes konvertieren und tun können, was erledigt wird, wenn Sie es wirklich dekodieren müssen. –

+0

IDK Warum meine C# -Tags gelöscht wurden, brauche ich etwas wie https://msdn.microsoft.com/en-us/library/system.io.binaryreader.readstring(v=vs.110).aspx C# write string with: length (7-Bit codierte Ganzzahl) + String und ich muss diese Zeichenfolge aus dem Puffer lesen. – avengerweb

Antwort

0

Meine Lösung:

function ReadSharpString(buffer) 
{ 
    let length = 0, shift = 0, offset = 0; 
    let byte; 

    do 
    { 
     byte = buffer[offset++]; 
     length |= (byte & 0x7F) << shift; 
     shift += 7; 
    } 
    while (byte >= 0x80); 

    this.length =() => { 
     return length; 
    }; 

    this.toBuffer =() => { 
     return buffer.slice(offset, offset + length) 
    }; 

    this.toString =() => { 
     return this.toBuffer().toString() 
    }; 
} 

Beispiel:

let String = new ReadSharpString (neu Buffer ([9, 87, 45, 68 , 45, 87, 45, 87, 45, 87]));

console.log (string.toBuffer());

console.log (string.toString());

console.log (string.length());

Verwandte Themen