收藏
回答

DataView 实例上找不到getBigInt64方法?

在真机调试下是能正常调用getBigInt64,但发版后就不能调用getBigInt64方法了。基础库已经升级到了2.13.1, iPhone设备上会有这个问题,安卓没有问题。

最后一次编辑于  2020-10-20
回答关注问题邀请回答
收藏

3 个回答

  • 查无此人
    查无此人
    2021-03-11

    这个问题你解决了嘛,我也遇到这个问题了,难搞啊

    2021-03-11
    有用
    回复 1
    • 阳光果粒橙
      阳光果粒橙
      2022-06-01
      function getInt64(dataview: DataView, byteOffset: number, littleEndian: boolean) {
        // 将 64 位整数值分成两份 32 位整数值
        const left = littleEndian?dataview.getUint32(byteOffset, littleEndian):dataview.getInt32(byteOffset, littleEndian);
        const right = littleEndian?dataview.getInt32(byteOffset + 4, littleEndian):dataview.getUint32(byteOffset + 4, littleEndian);
        // 合并两个 32 位整数值
        const combined = littleEndian ? left + 2 ** 32 * right : 2 ** 32 * left + right;
        if (!Number.isSafeInteger(combined))
          //超出number最大值会丢失精度 9007199254740991
          console.warn(combined, 'exceeds MAX_SAFE_INTEGER. Precision may be lost');


        return combined;
      }
      2022-06-01
      回复
  • 财要理你
    财要理你
    2020-10-23

    这边测试了iPhone 6 (IOS 12.4.2)和 iPhone 11 (IOS 14.0)都有这个问题;

    微信版本号:7.0.17

    错误截图:

    测试代码:

    const buffer = new ArrayBuffer(8)

    const dataView = new DataView(buffer)

    dataView.setUint16(0, 0)

    dataView.setUint16(2, 0)

    dataView.setUint16(4, 0)

    dataView.setUint16(6, 100)


    try {

      console.log('dataView.getBigInt64 value',  dataView.getBigInt64().toString())

    } catch (err) {

      console.error(err)

    }

    安卓平台是可以正常工作的:

    更神奇的是在真机调试模式下iPhone平台也是能工作的,预览和发版后是不能工作的

    2020-10-23
    有用
    回复
  • Cjiang
    Cjiang
    2020-10-20

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),提供下具体错误信息截图看看。

    2020-10-20
    有用
    回复 5
    • 财要理你
      财要理你
      2020-10-23
      这边测试了iPhone 6 (IOS 12.4.2)和 iPhone 11 (IOS 14.0)都有这个问题;
      微信版本号:7.0.17
      错误截图:
      测试代码:
      const buffer = new ArrayBuffer(8)
      const dataView = new DataView(buffer)
      dataView.setUint16(0, 0)
      dataView.setUint16(2, 0)
      dataView.setUint16(4, 0)
      dataView.setUint16(6, 100)
      try {
        console.log('dataView.getBigInt64 value', dataView.getBigInt64().toString())
      } catch (err) {
        console.error(err)
      }
      安卓平台是可以正常工作的:
      更神奇的是在真机调试模式下iPhone平台也是能工作的,预览和发版后是不能工作的
      2020-10-23
      回复
    • 财要理你
      财要理你
      2020-10-26
      有解决方案么?
      2020-10-26
      回复
    • 财要理你
      财要理你
      2020-11-10
      有解决方案了没有?
      2020-11-10
      回复
    • Cjiang
      Cjiang
      2020-11-10回复财要理你
      问题已反馈,有进展帖子同步。
      2020-11-10
      回复
    • 财要理你
      财要理你
      2020-11-11回复Cjiang
      谢谢
      2020-11-11
      回复
登录 后发表内容
问题标签