export function IntegerToHexString(num, nLen) { if (num == null) { let str = ""; for (let i = 0; i < nLen; i++) { str += "0"; } return str; } return HighAddZero(num.toString(16), nLen); } export function HighAddZero(str, nLen) { let length = str.length; let nAddLen = nLen - length; if (length > nLen) { str = str.substring(0, nLen); } else { for (let i = 0; i < nAddLen; i++) { str = "0" + str; } } return str; } const DIGITS_UPPER = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ]; export function HexToString(inHex) { let i; let strResult = ""; for (i = 0; i < inHex.length; i++) { strResult += DIGITS_UPPER[(0xF0 & inHex[i]) >>> 4]; strResult += DIGITS_UPPER[inHex[i] & 0x0F]; } return strResult; } /** * 十六进制字符串转字节数组 * * @param {string} str * @returns {Uint8Array} */ export function hexStringToByteArray(str) { if (!str) { return new Uint8Array(); } const result = new Uint8Array(str.length / 2); for (let i = 0; i < str.length; i += 2) { result[i / 2] = parseInt(str.substr(i, 2), 16); } return result; } /** * 十六进制转十进制 * * @param {string} data * @returns {string} */ export function HexToInt(data) { let num = -1; try { num = parseInt(data, 16); } catch (e) { console.error(e); } return num.toString(); } function guessEncoding(bytes) { // 检查字节序列是否以 BOM(字节顺序标记)开头 if (bytes[0] === 0xEF && bytes[1] === 0xBB && bytes[2] === 0xBF) { return 'UTF-8'; } else if (bytes[0] === 0xFE && bytes[1] === 0xFF) { return 'UTF-16BE'; } else if (bytes[0] === 0xFF && bytes[1] === 0xFE) { return 'UTF-16LE'; } else { // 统计每个字节的频率 let freq = {}; for (let i = 0; i < bytes.length; i++) { let b = bytes[i]; freq[b] = freq[b] ? freq[b] + 1 : 1; } // 检查是否存在 GBK 的特定字节序列 if (freq[0x81] && freq[0x81] > 0 && freq[0x40] && freq[0x40] > 0) { return 'GBK'; } // 如果没有特定的 GBK 字节序列,则假设为 UTF-8 return 'UTF-8'; } }