如何在javascript Uint32中反转字节顺序
我需要通过chrome.sockets.udp插件发送一个ArrayBuffer 数据通过安卓爱奥尼亚应用程序发送到计算机上运行的仿真器 我需要发送以下字段:如何在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
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
aka178 29 0
。如果您将字节视为有符号的,它将使用两个补码转换数字,并使用第一位表示正/负。178
和-78
h它们具有相同的二进制表示形式,但在使用无符号与有符号时,它们的解释不同。
dv.setUint32(12, 7602, true);