export function bytesToAscii(bytes: number[]): string { let s = '' for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i] & 0xFF) return s } export function asciiToBytes(s: string): Array { const out = [] as Array for (let i = 0; i < s.length; i++) { const c = s.charCodeAt(i) out.push(c == null ? 0 : c) } return out } export function bytesToHex(bytes: number[]): string { let s = '' for (let i = 0; i < bytes.length; i++) { const v = bytes[i] & 0xFF s += (v < 16 ? '0' : '') + v.toString(16) } return s } // "4D 00 00 01 01" => 0x4d 0x00 0x00 0x01 0x01 export function parseHexBytes(input: string): Array | null { let s = input.trim() if (s.length == 0) return [] as Array // 逗号、换行、制表符 全部变空格(全局) s = s.replace(/[,\n\t]/g, " ") // 去掉 0x / 0X(全局) s = s.replace(/0x/ig, "") const parts = s.split(" ") const out = [] as Array for (let i = 0; i < parts.length; i++) { const p = parts[i].trim() if (p.length == 0) continue const token = (p.length == 1) ? ("0" + p) : p const v = parseInt(token, 16) if (isNaN(v) || v < 0 || v > 255) return null out.push(v) } return out }