我在 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/