用websocket前后端通信,后端传64位二进制给前端,前端怎么将二进制转为后端服务中定义的Long型?

1、后端将一个long型数据转变为64位二进制,通过websocket传给前端,前端接收到一个ArrayBuffer对象,用getFloat64读取内存的数据,转为整数,可是发现与后端定义的数据不一致。

2、例如后端传的值是200000000001,前端接收到的为一个8字节的ArrayBuffer,用Int8Array取出,得到一个8位有符号整数[0, 0, 0, 46, -112, -19, -48, 1],并且取到的值与后端提供的二进制是一致的。

3、数据转换如下:
clipboard.png

4、后端返回的ArrayBuffer、转化的Int8Array数组以及用Float64Array得到的值:

clipboard.png

阅读 4.4k
2 个回答

function DecodeFloat64Array(Float64){

var dv = new DataView(Float64);
var newBuffer = Float64.slice(0, 8);
var udata = Array.from(new Int8Array(dv.buffer, dv.byteOffset, dv.byteLength));
var ans = 0;
for (var i = 0;i < 8;i++){
    if (udata[i] < 0) udata[i] += 256;
    ans = ans * 256 + udata[i];
}
return ans;

}

目前跟WebSocket传输二进制相关的博客还在整理 预计在这周写完发出,应该能够解决你的问题~~
2018年3月28日更新:WebSocket系列之JavaScript中数字数据如何转换为二进制数据
https://segmentfault.com/a/11... 你可以看下这个能不能解决你的疑惑 如果还有问题给我留言就行~~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏