如何在javascript Uint32中反转字节顺序

时间:2016-06-15 15:07:31

标签: javascript google-chrome ionic-framework uint32 byte-shifting

我需要通过chrome.sockets.udp插件发送一个ArrayBuffer。

数据通过Android离子应用程序发送到在计算机上运行的模拟器。

我需要发送以下字段:

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中插入数字以按照服务器期望的顺序获取字节?

1 个答案:

答案 0 :(得分:1)

您可以通过将DataView设置为endianness的第三个参数来反转设置为true的字节的setUint32。这将使用&#34; little-endian&#34;订购,并得到您期望的结果:

dv.setUint32(12, 7602, true);

&#13;
&#13;
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));
}
&#13;
&#13;
&#13;

注意:这里的值为负,因为它是作为签名 int8访问的。如果您以无符号 int8进行访问,则会看到&#34;正确&#34;潜在价值。