文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

将函数从 GO 转换为 Javascript:由偏移量和长度组成的范围超出范围

2024-04-04 23:50

关注

学习Golang要努力,但是不要急!今天的这篇文章《将函数从 GO 转换为 Javascript:由偏移量和长度组成的范围超出范围》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我正在尝试将函数从 go 翻译为 javascript(我对 go 几乎一无所知)。

这是原来的函数

func preparemessage(data []byte) []byte {
    // compute crc before modifying the message.
    crc := crccompute(data)
    // add the two crc16 bytes before replacing control characters.
    data = append(data, byte(crc&0xff))
    data = append(data, byte(crc>>8))

    tmp := []byte{0x7e} // flag start.

    // copy the message over, escaping 0x7e (flag byte) and 0x7d (control-escape).
    for i := 0; i < len(data); i++ {
        mv := data[i]
        if (mv == 0x7e) || (mv == 0x7d) {
            mv = mv ^ 0x20
            tmp = append(tmp, 0x7d)
        }
        tmp = append(tmp, mv)
    }

    tmp = append(tmp, 0x7e) // flag end.

    return tmp
}

这是我在 javascript 中的尝试

var _appendBuffer = function (buffer1, buffer2) {
    var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
    tmp.set(new Uint8Array(buffer1), 0);
    tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
    return tmp.buffer;
  };

 function prepareMessage(data) {
    // Compute CRC before modifying the message.
    var crc = crcCompute(data)
    // Add the two CRC16 bytes before replacing control characters.
    data = data + (crc & 0xFF);
    data = data + (crc >> 8);

    var tmp = new ArrayBuffer(1000000000);
    tmp[0] = [0x7E]; // Flag start.

    // Copy the message over, escaping 0x7E (Flag Byte) and 0x7D (Control-Escape).
    for (var i = 0; i < data.length; i++) {
      var mv = data[i]
      if ((mv == 0x7E) || (mv == 0x7D)) {
        mv = mv ^ 0x20;
        tmp = _appendBuffer(tmp, [0x7D]);
      }
      tmp = _appendBuffer(tmp, mv);
    }

    tmp = _appendBuffer(tmp, [0x7E]); // Flag end.
    return tmp;
  }

在preparemessage函数中出现此错误 rangeerror:由偏移量和长度组成的范围为bounds 在线 tmp = _appendbuffer(tmp, mv);

我知道缓冲区大小有问题,但我不知道如何修复它。

谢谢 莱昂


正确答案


tmp := []byte{0x7E} // 标志 start. 被声明并初始化为一个只有 1 项的数组。它已经满了,请尝试使用 make() 函数制作一个容量更大的切片。

这是一篇很好的文章,有更多细节。 https://www.godesignpatterns.com/2014/05/arrays-vs-slices.html

好了,本文到此结束,带大家了解了《将函数从 GO 转换为 Javascript:由偏移量和长度组成的范围超出范围》,希望本文对你有所帮助!关注编程网公众号,给大家分享更多Golang知识!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯