[英]Uint8Array values above 0x99 are printed as 0
我正在尝试读取一个二进制文件并提取其中的一部分以十六进制打印。 我必须从主机读取文件(使用FileReader
的readAsArrayBuffer
)。 我注意到有些东西一直在打印 0,我不知道为什么。
这是重现它的最小方法:
let t = new Uint8Array([ 0x26, 0xa6, 0x01, 0x99 ]);
console.log("T: " + t.map(b => b.toString(16)).join(" "));
输出:
T: 26 0 1 99
似乎任何超过0x99
值都会打印为 0。如果我用数组初始化它,比如let t = [ 0x26, 0xa6, 0x01, 0x99 ];
那么它的工作原理。
如果我在 Uint8Array 上调用“map”之前调用 Array.from() ,它也可以工作。 任何帮助表示赞赏。
类型化数组上的map
创建相同类型的类型化数组。 由于您从回调中返回字符串,因此它们会被转换为适合数组元素类型的整数,如果无法转换则为 0。 字符串"a6"
(例如)无法隐式转换,因此您会得到0
。
使用Array.from
的映射工具从可以join
在一起的回调创建一个字符串数组:
let t = new Uint8Array([ 0x26, 0xa6, 0x01, 0x99 ]); console.log("T: " + Array.from(t, b => b.toString(16)).join(" "));
值得注意的是,您在原始代码的输出中得到的26
具有误导性。 :-) 那是十进制值 26(而0x26
是十进制的38
)。 您传入0x26
,它被转换为"26"
,它被转换为26
(十进制,而不是十六进制),然后通过join
函数转换回"26"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.