1

chrome.sockets.udp プラグインを介して ArrayBuffer を送信する必要があります。

データは、Android ionic アプリを介して、コンピューター上で実行されるエミュレーターに送信されます。

次のフィールドを送信する必要があります。

var arrayBuffer = new ArrayBuffer(20);
var dv = new DataView(arrayBuffer,0);

console.log("ID=0 assign");
dv.setUint16(0,0);
console.log("SIZE=12 assign");
dv.setUint16(2,12);
console.log("CRC=0 assign");
dv.setUint16(4,0);
console.log("MSGcount assign");
dv.setUint16(6,0);
console.log("AppVersion assign");
dv.setUint32(8,0);
console.log("Port assign");
dv.setUint32(12,7602);
for (var i = 0; i <= 19; i++) {
  console.log("byte number is " +i+ " "  +dv.getInt8(i));
}
dv.setUint32(16,20000);

このコードを実行すると、次の結果が得られます。

byte number is 12 0
byte number is 13 0
byte number is 14 29
byte number is 15 -78

サーバーは次の結果を取得する必要があります。

byte number is 12 78
byte number is 13 29
byte number is 14 0
byte number is 15 0

サーバーが期待する順序でバイトを取得するには、dataView に数値を挿入する方法を教えてください。

4

1 に答える 1

1

の 3 番目のパラメータに設定することで、 に設定されたバイトのエンディアンを逆にすることができます。これは「リトル エンディアン」の順序付けを使用し、期待どおりの結果が得られます。DataViewtruesetUint32

dv.setUint32(12, 7602, true);

var arrayBuffer = new ArrayBuffer(20);
var dv = new DataView(arrayBuffer, 0);

dv.setUint32(12, 7602, true);

for (var i = 12; i <= 15; i++) {
  console.log("byte number is " + i + " " + dv.getInt8(i));
}

注:符号付きint8 としてアクセスされているため、値はここでは負です。unsigned int8としてアクセスすると、「正しい」基になる値が表示されます。

于 2016-06-15T15:41:07.320 に答える