JavaScript:期望获取数值却得到null,如何正确取ArrayBuffer首字节?
解决ArrayBuffer无法直接索引导致nonce值异常的问题
问题原因
crypto.subtle.digest()返回的是ArrayBuffer类型,这种类型本身不支持通过下标(如[0])直接访问内部字节数据,所以msgBuffer[0]实际是undefined,和初始值0相加后得到NaN(你看到的null属于表述误差)。
解决方法
把ArrayBuffer转换为TypedArray(比如Uint8Array),TypedArray专门用于访问二进制数据的单个元素:
var msgBuffer = await crypto.subtle.digest('SHA-256', toHash); // 返回ArrayBuffer var byteArray = new Uint8Array(msgBuffer); // 将ArrayBuffer转为Uint8Array var nonce = 0; nonce += byteArray[0]; // 正确获取第一个字节的数值(0-255之间)
补充说明
Uint8Array会将ArrayBuffer中的每个字节映射为0到255的整数,完全满足你提取单个字节值的需求。如果需要处理其他位数的数值,也可以根据场景选择Uint16Array、Int32Array等其他TypedArray类型。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

