我正在研究这个真正令人头疼的问题!
我成功地将字节值添加到 Uint8ClampedArray 并使用该数组使用此函数生成字节字符串:
this.utf8ArrayToStr = function(array) {
var s = '';
for (var i = 0; i < array.length; i++) {
s += String.fromCharCode(array[i]);
}
return s;
};
这很有用,并成功生成了正确的字节序列。
问题是并非所有浏览器都支持 Uint8ClampedArray,我特别需要它才能在 Android 浏览器上运行。
我尝试使用标准的 Uint8Array,但它会在结果字符串中产生额外的字节值,从而导致错误行为。
我在这里也找到了一个小垫片,但它没有用,再次产生额外的输出: https://gist.github.com/gengkev/2295355
无论如何我可以让 Uint8Array 充当 Uint8ClampedArray,或者更具体地说,在上面的函数中生成字符串时限制值?
更新:看起来我正在使用标准数组到达某个地方,但仍然有一些困惑的字符导致问题。
最佳答案
我认为您不应该使用 Uint8Array 来存储您的数据——它根本不像 Uint8ClampedArray 那样工作。例如:
a = new Uint8Array(1);
b = new Uint8ClampedArray(1);
a[0] = 256;
b[0] = 256;
a[0] === 0; // true
b[0] === 255; // true
我只会使用常规数组(如果这是一个选项)并在将值存储到其中时或在读取它们以生成字符串时限制值,如下所示:
s += String.fromCharCode(Math.max(0, Math.min(255, array[i])));
关于javascript - Uint8ClampedArray 替代或使 Uint8Array 产生字节值的钳制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24240257/