import { v1, v4, v7 } from "uuid" export const uuid = { v1: v1, v4: v4, v7: v7, toArrayBuffer: uuidToArrayBuffer, fromArrayBuffer: uuidFromArrayBuffer, toUnit8Array: uuidToUnit8Array, fromUnit8Array: uuidFromUnit8Array, } const UUID = uuid export { UUID } function uuidToUnit8Array(uuid: string): Uint8Array { // 移除 UUID 中的破折号 const hex = uuid.replace(/-/g, "") // 创建一个 Uint8Array 来存储字节 const buffer = new Uint8Array(hex.length / 2) // 将每两个十六进制字符转换为一个字节 for (let i = 0; i < hex.length; i += 2) { buffer[i / 2] = parseInt(hex.substring(i, i + 2), 16) } return buffer } function uuidFromUnit8Array(buffer: Uint8Array): string { // 将 Uint8Array 转换为十六进制字符串 const hex = Array.from(buffer) .map((byte) => byte.toString(16).padStart(2, "0")) .join("") // 插入破折号以形成标准 UUID 格式 return `${hex.substring(0, 8)}-${hex.substring(8, 12)}-${hex.substring(12, 16)}-${hex.substring( 16, 20 )}-${hex.substring(20)}` } /** 把 UUID 字符串形式转换为 ArrayBuffer */ function uuidToArrayBuffer(uuid: string): ArrayBuffer { let uuid_u8 = uuidToUnit8Array(uuid) return uuid_u8.buffer } /** 把 ArrayBuffer 形式的 UUID 转换为 UUID 字符串形式 */ function uuidFromArrayBuffer(buffer: ArrayBuffer): string { const uint8Array = new Uint8Array(buffer) return uuidFromUnit8Array(uint8Array) }