javascript - Uint8ClampedArray 替代或使 Uint8Array 产生字节值的钳制字符串

标签 javascript html html5-canvas typed-arrays

我正在研究这个真正令人头疼的问题!

我成功地将字节值添加到 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/

相关文章:

javascript - for...in 循环和 jQuery each() 函数有什么区别?

javascript - HTML/JS 实时测试网站

javascript - 调整大小的黑色 Canvas 不会随着时间的推移完全褪色为黑色

javascript - context.clearRect(x,y,width,height) 与单个按钮一起使用时不起作用

javascript - jQuery:如何让回调函数只运行一次

javascript - jsFiddle jQuery ajax 函数在Load 上不起作用

javascript - node-nock 模拟路径中带有问号的 uri

html - 添加固定位置时页脚消失

html - 正确对齐社交按钮

javascript - 带 Canvas 的 2 列网格