var hexStringToBytes = function (hexString: string | null) { if (hexString == null || hexString == "") { return null; } hexString = hexString.toUpperCase(); let Length = hexString.length / 2; let hexChars = stringToByte(hexString); let d = []; for (let i = 0; i < Length; i++) { let pos = i * 2; let a = charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]); d.push(a); } return d; }; var charToByte = function (c: any) { let a = String.fromCharCode(c).toUpperCase(); return "0123456789ABCDEF".indexOf(a); }; var bytesToHexString = function (src: any) { let d = ""; if (src == null || src.length <= 0) { return null; } for (let i = 0; i < src.length; i++) { let v = src[i] & 0xFF; let hv = intTo16value(v); d += hv; } return d } /** * 将字符串转化成byte数组 * @param {字符串} str */ var stringToByte = function (str) { var bytes = new Array(); var len, c; len = str.length; for (var i = 0; i < len; i++) { c = str.charCodeAt(i); if (c >= 0x010000 && c <= 0x10FFFF) { bytes.push(((c >> 18) & 0x07) | 0xF0); bytes.push(((c >> 12) & 0x3F) | 0x80); bytes.push(((c >> 6) & 0x3F) | 0x80); bytes.push((c & 0x3F) | 0x80); } else if (c >= 0x000800 && c <= 0x00FFFF) { bytes.push(((c >> 12) & 0x0F) | 0xE0); bytes.push(((c >> 6) & 0x3F) | 0x80); bytes.push((c & 0x3F) | 0x80); } else if (c >= 0x000080 && c <= 0x0007FF) { bytes.push(((c >> 6) & 0x1F) | 0xC0); bytes.push((c & 0x3F) | 0x80); } else { bytes.push(c & 0xFF); } } return bytes; }; /** * 将数组转变成字符串 * @param {byte数组} arr */ var byteToString = function (arr) { if (typeof arr === 'string') { return arr; } var str = '', _arr = arr; for (var i = 0; i < _arr.length; i++) { var one = _arr[i].toString(2), v = one.match(/^1+?(?=0)/); if (v && one.length == 8) { var bytesLength = v[0].length; var store = _arr[i].toString(2).slice(7 - bytesLength); for (var st = 1; st < bytesLength; st++) { store += _arr[st + i].toString(2).slice(2); } str += String.fromCharCode(parseInt(store, 2)); i += bytesLength - 1; } else { str += String.fromCharCode(_arr[i]); } } return str; }; /** * 字符串转Ascii * @param {*} strLine */ var stringToAscii = function (strLine) { let lineArr = stringToByte(strLine) let __strLine = ''; for (var i = 0; i < lineArr.length; i++) { __strLine += intTo16value(lineArr[i]); } return __strLine; }; /** * 10进制转16进制 * @param {*} data */ var intTo16value = function (data) { return data.toString(16).toUpperCase().PadLeft(2, '0'); }; /** * 10进制转16进制 * @param {*} data * @param {*} len */ var intToHex = function (data, len) { let intData = parseInt(data); return intData.toString(16).toUpperCase().PadLeft(len, '0'); }; /** * DateTime时间格式转换为8位不带毫秒的Unix时间戳 * @param {*} time * @returns */ var convertDateTimeHex = function (time) { var timestamp = Date.parse(time) / 1000; return intToHex(timestamp, 8); } /** * 发布模块 */ module.exports = { HexStringToBytes: hexStringToBytes, BytesToHexString: bytesToHexString, ByteToString: byteToString, StringToAscii: stringToAscii, IntToHex: intToHex, ConvertDateTimeHex: convertDateTimeHex }