为什么我的JavaScript toHexString函数不能与Uint8Array一起正常工作?

时间:2016-02-11 14:47:44

标签: javascript

这是我的toHexString函数:

function toHexString(bytes) {
    return bytes.map(function (byte) {
        return ("00" + (byte & 0xFF).toString(16)).slice(-2)
    }).join('')
}

这就是我在Chrome控制台中所做的:

> var bitmapArray = new Uint8Array(buffer);

undefined

> toHexString(bitmapArray.subarray(0,3))

"2100"

> bitmapArray.subarray(0,3)

[33, 29, 31]

> toHexString([33,29,31])

"211d1f"
似乎toHexString函数无法正常工作。有什么问题?

1 个答案:

答案 0 :(得分:3)

map method of typed arrays返回另一个相同类型的类型化数组。这会将字符串"21""1d""1f"转换为字节,将它们解释为十进制整数 - 后两者不是,因此NaN变为0最终得到了Uint8Array([21, 0, 0])

要解决此问题,请使用包含字符串的普通Array

toHexString(Array.from(bitmapArray.subarray(0,3)))

或者甚至更好

function toHexString(bytes) {
    return Array.from(bytes, byte =>
        ("00" + (byte & 0xFF).toString(16)).slice(-2)
    ).join('');
}