这是我的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函数无法正常工作。有什么问题?
答案 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('');
}