Uint8Array.prototype.setFromHex()

基准线 2025
新推出

自 ⁨2025 年 9 月⁩起,此功能适用于最新设备和浏览器版本。此功能可能不适用于较旧的设备或浏览器。

Uint8Array 实例的 setFromHex() 方法使用十六进制编码字符串中的字节填充此 Uint8Array 对象,并返回一个指示读取和写入了多少字节的对象。

此方法会将字符串解析为字节数组。要将字符串转换为单个数字,请改用 radix 设置为 16parseInt() 函数。

语法

js
setFromHex(string)

参数

string

要写入 Uint8Array 的字节的十六进制字符串编码。该字符串必须

  • 具有偶数个字符,因为两个字符编码一个字节。
  • 仅包含十六进制字母表中的字符,其中包括 0-9 和 A-F(不区分大小写)。
  • 不包含空格(与 Uint8Array.prototype.setFromBase64() 不同)。

请注意,字符串仅读取到数组填满为止,因此此后任何无效的十六进制语法都将被忽略。

返回值

包含以下属性的对象:

read

从输入字符串中读取的十六进制字符数。如果解码后的数据适合数组,则它等于输入字符串的长度;否则,它等于适合数组的完整十六进制字符数。

written

写入 Uint8Array 的字节数。永远不会大于此 Uint8ArraybyteLength

异常

SyntaxError

如果输入字符串包含十六进制字母表之外的字符,或者其长度为奇数,则会抛出此错误。

TypeError

如果输入字符串不是字符串,则会抛出此错误。

示例

解码十六进制字符串

此示例将十六进制字符串解码到现有的 Uint8Array 中。

js
const uint8Array = new Uint8Array(8);
const result = uint8Array.setFromHex("cafed00d");
console.log(result); // { read: 8, written: 4 }
console.log(uint8Array); // Uint8Array(8) [202, 254, 208, 13, 0, 0, 0, 0]

将大字符串解码到小数组中

如果字符串包含的数据多于数组可容纳的数量,则该方法将只写入数组可容纳的字节数。

js
const uint8Array = new Uint8Array(4);
const result = uint8Array.setFromHex("cafed00d-some random stuff");
console.log(result); // { read: 8, written: 4 }
console.log(uint8Array); // Uint8Array(4) [202, 254, 208, 13]

多余的字符将被忽略,即使它们是无效的。但是,输入字符串的总长度必须是偶数。

在特定偏移量设置数据

setFromHex() 方法始终从 Uint8Array 的开头开始写入。如果要写入数组中间,则可以改用 TypedArray.prototype.subarray() 写入。

js
const uint8Array = new Uint8Array(8);
// Start writing at offset 2
const result = uint8Array.subarray(2).setFromHex("cafed00d");
console.log(result); // { read: 8, written: 4 }
console.log(uint8Array);
// Uint8Array(8) [0, 0, 202, 254, 208, 13, 0, 0]

规范

规范
Uint8Array 与 base64 的相互转换
# sec-uint8array.prototype.setfromhex

浏览器兼容性

另见