【问题标题】:Javascript - byte array to long?Javascript - 字节数组长吗?
【发布时间】:2014-04-19 11:21:29
【问题描述】:

我有一个由 Java 构造的 byteArray,其中包含 longs。我需要能够在 Javascript 中阅读这些 long。我了解默认情况下 Javascript 不支持 longs。有没有办法解决?我可以把它读成String 吗?

谢谢

【问题讨论】:

  • 真正的问题是你不能拥有大于 2^53 - 1 的数字,因为 JavaScript 只知道 IEEE 754 64 位浮点数。但是您可以使用按位运算来尽可能多地进行重构。当然你也应该知道字节序是LE还是BE
  • 请看下面我的回答,currentTimeMilis() 将是

标签: java javascript byte bytearray long-integer


【解决方案1】:

我想分享我可能对某人有用的技巧。

我的 java 服务器通过二进制 websocket 消息从System.currentTimeMillis() 为所有客户端发送具有长时间戳的玩家位置。在客户端解析这条消息我使用DataView

但是DataView没有方法getInt64()。而我的解决方案是分两部分发送long。

在服务器端:

long time = System.currentTimeMillis();
int firstPiece = (int)(time / 1000);
short secondPiece = (short)(time % 1000);

在客户端:

let data = {};
let view = new DataView(binary);
data.t = view.getInt32(offset) * 1000 + view.getInt16(offset + 4);

这也节省了 2 个字节(长 8 字节 > int 4 字节 + 短 2 字节),但它可以工作到 2038 年 https://en.wikipedia.org/wiki/Year_2038_problem

【讨论】:

    【解决方案2】:

    下面的DataView.getInt64() 实现将让您以足够的精度做到这一点:

    How to Read 64-bit Integer from an ArrayBuffer / DataView in JavaScript

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多