javascript - 如何将(数字)数组加载到谷歌应用程序脚本中 Byte[]

标签 javascript google-apps-script

我在 Google Apps 脚本中有一个(数字)数组,我想将其转换为 base64。我当然可以使用一个简单的开源库,例如 this one .

然而,GAS 已经使用 Utilities.base64Encode(Byte[]) 提供了此功能。 但要调用此函数,我需要一个 Byte[] 而不是 Number[]

因此以下脚本会出现错误:(无法将数组转换为 (class)[]。)

function testBase64Encode()
{
  var bytes = [];
  for (var i = 0; i < 255; i++) bytes.push(i);

  var x = Utilities.base64Encode(bytes)
} 

通常 Byte[] 直接来自 Blob 的 GetBytes() 函数,但在我的例子中,数组(数字)来自 zlib encryption lib .

因此,我试图找到一种方法将该数字数组转换为 Byte[],可以与 Utilities.base64Encode(Byte[]) 一起使用。

我确实尝试自己创建一个字节并将它们放入数组中,但是以下代码也给出了错误:(ReferenceError: "Byte"is not Defined.)

var b1 = new Byte();

我做了一些更多的测试,只要字节数值中的值是 128 或更低,它似乎就可以工作。我觉得这很奇怪,因为一个字节应该达到 255。

以下代码对于“bytes”运行良好,但对于“bytes2”则失败,因为有一个值大于 128:

function testByteArrays()
{
  var bytes = [];
  for (var i = 0; i < 128; i++) bytes.push(i);
  var x = Utilities.newBlob(bytes)

  var bytes2 = [];
  for (var i = 0; i < 129; i++) bytes2.push(i);
  var x = Utilities.newBlob(bytes2)
}

最佳答案

...a byte should go up to 255.

但不在 Two's complement 中符号...在这种情况下,字节应在 [-128..127] 范围内,其中高位被保留为符号位。给定一个正整数 i,如果它大于 127,我们需要计算其补码。这可以通过减去 28 (256) 来完成。将其应用于您的第一个示例:

function testBase64Encode()
{
  var bytes = [];
  for (var i = 0; i < 255; i++) bytes.push(i<128?i:i-256);

  var x = Utilities.base64Encode(bytes)
} 

这将避免您收到的错误消息(无法将数组转换为(类)[]。)。理想情况下,您还应该确保数值从 0..255 范围开始。

关于javascript - 如何将(数字)数组加载到谷歌应用程序脚本中 Byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20630661/

相关文章:

google-apps-script - 使用 Web-to-lead POST webthod 将 Google Apps 脚本表单作为潜在客户发送到 Salesforce

google-apps-script - onOpen() 函数在桌面上触发,但在 Android 上不触发

javascript - 为所有值创建 1 个更新按钮

javascript - Webpack 可以从 SCSS 和 Pug 构建多个 HTML 文件吗?

javascript - 在 AMMAP 中动态设置和缩放国家 map

javascript - 如何使用 javascript/jquery 实时设置用户输入样式

javascript - 如何覆盖对象的默认输出?

html - 使用 Google Apps 脚本在电子邮件正文中将 Google Doc 作为 HTML 发送,同时保留格式

javascript - 具有特定范围的自定义 OnChange() 触发器 (googlesheet)

javascript - 使用 google 脚本检查 forEach 是否达到限制结果