Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

2 лет назад
2 лет назад
2 лет назад
2 лет назад
2 лет назад
2 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. // import {
  2. // TextEncoder,
  3. // TextDecoder
  4. // } from "text-decoding";
  5. export function IntegerToHexString(num, nLen) {
  6. if (num == null) {
  7. let str = "";
  8. for (let i = 0; i < nLen; i++) {
  9. str += "0";
  10. }
  11. return str;
  12. }
  13. return HighAddZero(num.toString(16), nLen);
  14. }
  15. export function HighAddZero(str, nLen) {
  16. let length = str.length;
  17. let nAddLen = nLen - length;
  18. if (length > nLen) {
  19. str = str.substring(0, nLen);
  20. } else {
  21. for (let i = 0; i < nAddLen; i++) {
  22. str = "0" + str;
  23. }
  24. }
  25. return str;
  26. }
  27. export function AsciToHexString(strAsci, nLen) {
  28. let s = String(strAsci);
  29. let encoder = new TextEncoder("UTF-8");
  30. let bytes = encoder.encode(s);
  31. let strResult = HexToString(bytes);
  32. let strLen = strResult.length;
  33. if (strLen >= nLen) {
  34. strResult = strResult.substring(0, nLen);
  35. } else {
  36. let nAddLen = nLen - strLen;
  37. for (let i = 0; i < nAddLen; i++) {
  38. strResult += "0";
  39. }
  40. }
  41. return strResult;
  42. }
  43. const DIGITS_UPPER = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
  44. 'E', 'F'
  45. ];
  46. export function HexToString(inHex) {
  47. let i;
  48. let strResult = "";
  49. for (i = 0; i < inHex.length; i++) {
  50. strResult += DIGITS_UPPER[(0xF0 & inHex[i]) >>> 4];
  51. strResult += DIGITS_UPPER[inHex[i] & 0x0F];
  52. }
  53. return strResult;
  54. }
  55. /**
  56. * 十六进制转汉字
  57. *
  58. * @param {string} data
  59. * @returns {string}
  60. */
  61. export function HexToStrig(data,charType=1) {
  62. let str = data.substring(data.length - 2);
  63. while (str === "00") {
  64. data = data.substring(0, data.length - 2);
  65. if (data.length === 0) {
  66. return "";
  67. }
  68. str = data.substring(data.length - 2);
  69. }
  70. const asd = hexStringToByteArray(data);
  71. try {
  72. if(charType ==1){
  73. str = new TextDecoder("GBK").decode(asd);
  74. }else{
  75. str = new TextDecoder("UTF-8").decode(asd);
  76. }
  77. } catch (e) {
  78. console.error(e);
  79. }
  80. return str;
  81. }
  82. /**
  83. * 十六进制字符串转字节数组
  84. *
  85. * @param {string} str
  86. * @returns {Uint8Array}
  87. */
  88. export function hexStringToByteArray(str) {
  89. if (!str) {
  90. return new Uint8Array();
  91. }
  92. const result = new Uint8Array(str.length / 2);
  93. for (let i = 0; i < str.length; i += 2) {
  94. result[i / 2] = parseInt(str.substr(i, 2), 16);
  95. }
  96. return result;
  97. }
  98. /**
  99. * 十六进制转十进制
  100. *
  101. * @param {string} data
  102. * @returns {string}
  103. */
  104. export function HexToInt(data) {
  105. let num = -1;
  106. try {
  107. num = parseInt(data, 16);
  108. } catch (e) {
  109. console.error(e);
  110. }
  111. return num.toString();
  112. }
  113. function guessEncoding(bytes) {
  114. // 检查字节序列是否以 BOM(字节顺序标记)开头
  115. if (bytes[0] === 0xEF && bytes[1] === 0xBB && bytes[2] === 0xBF) {
  116. return 'UTF-8';
  117. } else if (bytes[0] === 0xFE && bytes[1] === 0xFF) {
  118. return 'UTF-16BE';
  119. } else if (bytes[0] === 0xFF && bytes[1] === 0xFE) {
  120. return 'UTF-16LE';
  121. } else {
  122. // 统计每个字节的频率
  123. let freq = {};
  124. for (let i = 0; i < bytes.length; i++) {
  125. let b = bytes[i];
  126. freq[b] = freq[b] ? freq[b] + 1 : 1;
  127. }
  128. // 检查是否存在 GBK 的特定字节序列
  129. if (freq[0x81] && freq[0x81] > 0 && freq[0x40] && freq[0x40] > 0) {
  130. return 'GBK';
  131. }
  132. // 如果没有特定的 GBK 字节序列,则假设为 UTF-8
  133. return 'UTF-8';
  134. }
  135. }