/** * 从 hex 字符串生成二级制数据 */ export function hexToData(hexString: string): Uint8Array export function hexToData(hexString: string, type: "Uint8Array"): Uint8Array export function hexToData(hexString: string, type: "string"): string export function hexToData(hexString: string, type: "ArrayBuffer"): ArrayBuffer export function hexToData(hexString: string, type: "Uint8Array" | "string" | "ArrayBuffer" = "Uint8Array"): Uint8Array | string | ArrayBuffer { if (typeof hexString !== "string") throw new TypeError("formHex input must be a string.") // 移除常见的 0x 前缀(如果有),再清理无用字符 if (/^0x/i.test(hexString)) { hexString = hexString.slice(2) } // 清理无用字符 hexString = hexString.replace(/[^0-9a-fA-F]/g, "") if (hexString.length % 2 !== 0) throw new RangeError("formHex input is not a valid hex string.") const view = new Uint8Array(hexString.length / 2) for (let i = 0; i < hexString.length; i += 2) { view[i / 2] = parseInt(hexString.substring(i, i + 2), 16) } if (type == "string") return String.fromCharCode(...view) if (type == "ArrayBuffer") return view.buffer return view }