123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- import {
- TextEncoder,
- TextDecoder
- } from "../node-model/text-decoding";
-
- 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;
- }
- // export function AsciToHexString(strAsci, nLen) {
- // let s = String(strAsci);
- // let encoder = new TextEncoder("UTF-8");
- // let bytes = encoder.encode(s);
- // let strResult = HexToString(bytes);
- // let strLen = strResult.length;
- // if (strLen >= nLen) {
- // strResult = strResult.substring(0, nLen);
- // } else {
- // let nAddLen = nLen - strLen;
- // for (let i = 0; i < nAddLen; i++) {
- // strResult += "0";
- // }
- // }
- // return strResult;
- // }
-
- 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} data
- * @returns {string}
- */
- export function HexToStrig(data, charType = 1) {
-
- let str = data.substring(data.length - 2);
- while (str === "00") {
- data = data.substring(0, data.length - 2);
- if (data.length === 0) {
- return "";
- }
- str = data.substring(data.length - 2);
- }
- const asd = hexStringToByteArray(data);
- try {
- str = new TextDecoder("GBK").decode(asd);
-
- } catch (e) {
- console.error(e);
- }
- return str;
- }
-
- /**
- * 十六进制字符串转字节数组
- *
- * @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';
- }
- }
|