2016-07-17 2 views
-1

WebSocketからuInt8Arrayを受け取り、そこからInt32を読み込みたいとします。 私はデータビューを使用してみましたが、私にとっては期待どおりに動作しません。uInt8ArrayからInt32を取得するNodejs

vWebSocket=new WebSocket("http://127.0.0.1:8081","",{perMessageDeflate:true}); 
wWebSocket.on('message', function(prData,prFlags) 
{ 
    var vDataView=new DataView(prData.buffer); 
    var vLong=vDataView.getInt32(0,true); 
    console.log('Datas received'+vLong); 
} 

は、もともと私は、(sgcWebSocketを使用してデルファイアプリケーションから)デバッガPRDATAで

  • を「350000」INT32をsendedではUint8Arrayとして見られ、それは正しいバイト値[48,87,5,0]が含ま
  • が、微細vlongに含ま1717920771または154220088(私はエンディアンを変更しようとした)の代わりに、350000

私はので、私は、私はarroundのグーグルが、私は任意の手掛かり

が見つかりませんでした私は初心者の間違いをしなければならないと仮定JavaScriptにはかなり新しいです あなたの観察と
+0

prData *が 'Uint8Array'ではない可能性がありますか? –

+1

@ T.J.Crowder:デバッガは、それが 'UInt8Array'だと思っているようです。また、 '0x30'、' 0x57'、 '0x05'、' 0x00'を含んでいます。これは本当にビッグエンディアン(ネットワーク)形式の '350000'または' 0x00055730'です。 –

+0

@RudyVelthuis:ヘンリーが言ったことを確認しました。本当にそれらの内容のUint8Arrayだった場合は、表示された 'DataView'コードが機能するため、私は確認を求めていました。 (https://jsfiddle.net/xbh6qr6v/)それは示唆している...そうではありません。 –

答えて

0

おかげで、私が掘って、私はついに見つけ問題。 デバッガは実際にはバッファであったUint8ArrayとしてprDataを見ていましたが、 私はそれを見て、デバッガの "__proto__"フィールド(intellijで)を認識しました。

var vLong=prData.readInt32LE(); 
console.log('Datas received:'+vLong); 

:TJクラウダーの例では

  • は "__proto__" "__proto__" 私の場合はuInt8Array
  • だったので、私は自分のコードを変更し

緩衝液でした(もちろん、データビューを使用する必要はありません)

あなたのご意見ありがとうございました。

関連する問題