2017-03-06 7 views
0

私はNode.jsのバッファに整数を格納し、blenoを介してクライアント側に送信しようとしている:Node.jsバッファをクライアント側の整数に変換するには?

var num = 24; 
var buf = new Buffer(1); 
buf.writeUInt8('0x' + num, 0); 
//send buf using bleno 

私は、次のようにクライアント側の文字列に変換し、これをコード:

function bytesToString(buffer) {  
    return String.fromCharCode.apply(null, new Uint8Array(buffer)); 
} 

問題は、元の値を戻すことができないことです(24)。代わりに、これは '#'文字列です。 私はまた、ここで解決策を試しました:Converting between strings and ArrayBuffersしかし、私は中国語またはユニコード文字を取得します。

は、ここで私はNode.jsの側には、以前にやっていたものだと、それは上bytesToString機能を持つ任意の問題もなく動作します。

new Buffer(num.toString()); 

しかし、要件が、私はそれを変換せずに整数または浮動小数点数を送信する必要があることを指定しました文字列に。これは可能ですか?私が間違っていることは何ですか?前もって感謝します。

答えて

2

あなたは、このやっているとき:

buf.writeUInt8('0x' + num, 0); 

をあなたはまだ関係なく、あなたが後で何をすべきか、それはすでにこの時に文字列に変換されていない'0x' + numに別の文字列とそれを連結して文字列に変換されていますあなたがデフォルトで10進数に変換された数字に16進数の接頭辞を付加しているからです。

ここでやっていることは、JSONとして簡単に転送できる数値をシリアル化する非常に複雑で間違った方法です。

+0

だから私は何をするとお考えですか? 'buf.writeUInt8(0x24、0)'を使うと、bytesToString()関数を使う代わりに、文字を '$'に変更します。 –

+0

@WernAnchetaそうです。0x24は ''$''文字のASCII値です。そのバッファを後で文字列に変換すると、期待どおりのドル記号が得られます。私は、JSONやXML、あるいはあなた自身の発明ではなく、特に問題があるときに、よくテストされたシリアル化を使うことを提案します。 – rsp

+0

ご回答いただきありがとうございます。本当にありがとうございます。問題は、これらの値がBluetoothの低エネルギーを使用して送信され、特定の間隔で送信されるため、JSONまたはXMLを実際に使用できないことです。私はそれがASCII相当の場合は正しい軌道にいると思います。これから元の価値を取り戻すことをどうお勧めしますか?私はちょうどこれを見つけた:http://stackoverflow.com/questions/20580045/javascript-character-ascii-to-hex私はそれが動作するはずだと思う。 –

関連する問題