javascript - 如何反转 javascript Uint32 中的字节顺序

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

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

最佳答案

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

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));
}

注意:这里的值是负数,因为它是作为signed int8 访问的。如果您以无符号 int8 形式访问,您将看到“正确”的基础值。

关于javascript - 如何反转 javascript Uint32 中的字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37839239/

相关文章:

javascript - 获取检查值 Ionic 3

javascript - 渲染 subview ,维护历史记录而不重新渲染整个 View 。这可能吗?

javascript - 需要使用正则表达式从时区字符串中删除 Offset

html - Chrome 在网页末尾渲染额外的空白

HTML 视频并不总是在 Chrome 中播放

javascript - 改变 ionic 负载

javascript - 添加时区到倒计时器

javascript - 识别 css 选择器字符串与 XPath 字符串

google-chrome - 在 Chrome 上显示 RTSP

ionic-framework - Camera.getPicture 不是 ionic 3 中的函数