Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript Uint32中反转字节顺序_Javascript_Google Chrome_Ionic Framework_Uint32_Byte Shifting - Fatal编程技术网

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

如何在javascript Uint32中反转字节顺序,javascript,google-chrome,ionic-framework,uint32,byte-shifting,Javascript,Google Chrome,Ionic Framework,Uint32,Byte Shifting,我需要通过chrome.sockets.udp插件发送一个ArrayBuffer 数据通过安卓爱奥尼亚应用程序发送到计算机上运行的仿真器 我需要发送以下字段: 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

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

数据通过安卓爱奥尼亚应用程序发送到计算机上运行的仿真器

我需要发送以下字段:

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 78
byte number is 13 29
byte number is 14 0
byte number is 15 0
如何在dataView中插入数字以获得服务器期望的字节顺序?

通过将
true
设置为的第三个参数,可以反转设置为
dataView
的字节顺序。这将使用“little endian”排序,并产生您期望的结果:

dv.setUint32(12, 7602, true);
var arrayBuffer=新的arrayBuffer(20);
var dv=新数据视图(arrayBuffer,0);
dv.setUint32(127602,真实);

对于(var i=12;i实际上,服务器的预期结果应该是
字节数为12 178
。请记住,该数字被设置为无符号,因此它应该被检索为无符号。我需要它为78,正如服务器预期的那样,我如何做到这一点?将原始数字从
7602
更改为
7502
,或者采用绝对值服务器端第一个字节的ute值。您好,谢谢您的回复,但是当我使用
dv.getInt8(i)时
我得到了以下结果:
字节数是12178
,为什么不是78?7602的32位无符号二进制形式是
000000000000000000000111011011010
。它只是将每个字节的值显示为无符号数,即
0029178
(使用十进制到二进制转换器自己查看)。当您使用小尾端排序时,它会反转这些字节的顺序,因此它将是
10110010 00011101 00000000 00000000
aka
178 29 0
。如果您将字节视为有符号的,它将使用两个补码转换数字,并使用第一位表示正/负。
178
-78
h它们具有相同的二进制表示形式,但在使用无符号与有符号时,它们的解释不同。
dv.setUint32(12, 7602, true);