您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. export function IntegerToHexString(num, nLen) {
  2. if (num == null) {
  3. let str = "";
  4. for (let i = 0; i < nLen; i++) {
  5. str += "0";
  6. }
  7. return str;
  8. }
  9. return HighAddZero(num.toString(16), nLen);
  10. }
  11. export function HighAddZero(str, nLen) {
  12. let length = str.length;
  13. let nAddLen = nLen - length;
  14. if (length > nLen) {
  15. str = str.substring(0, nLen);
  16. } else {
  17. for (let i = 0; i < nAddLen; i++) {
  18. str = "0" + str;
  19. }
  20. }
  21. return str;
  22. }
  23. const DIGITS_UPPER = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
  24. 'E', 'F'
  25. ];
  26. export function HexToString(inHex) {
  27. let i;
  28. let strResult = "";
  29. for (i = 0; i < inHex.length; i++) {
  30. strResult += DIGITS_UPPER[(0xF0 & inHex[i]) >>> 4];
  31. strResult += DIGITS_UPPER[inHex[i] & 0x0F];
  32. }
  33. return strResult;
  34. }
  35. /**
  36. * 十六进制字符串转字节数组
  37. *
  38. * @param {string} str
  39. * @returns {Uint8Array}
  40. */
  41. export function hexStringToByteArray(str) {
  42. if (!str) {
  43. return new Uint8Array();
  44. }
  45. const result = new Uint8Array(str.length / 2);
  46. for (let i = 0; i < str.length; i += 2) {
  47. result[i / 2] = parseInt(str.substr(i, 2), 16);
  48. }
  49. return result;
  50. }
  51. /**
  52. * 十六进制转十进制
  53. *
  54. * @param {string} data
  55. * @returns {string}
  56. */
  57. export function HexToInt(data) {
  58. let num = -1;
  59. try {
  60. num = parseInt(data, 16);
  61. } catch (e) {
  62. console.error(e);
  63. }
  64. return num.toString();
  65. }
  66. function guessEncoding(bytes) {
  67. // 检查字节序列是否以 BOM(字节顺序标记)开头
  68. if (bytes[0] === 0xEF && bytes[1] === 0xBB && bytes[2] === 0xBF) {
  69. return 'UTF-8';
  70. } else if (bytes[0] === 0xFE && bytes[1] === 0xFF) {
  71. return 'UTF-16BE';
  72. } else if (bytes[0] === 0xFF && bytes[1] === 0xFE) {
  73. return 'UTF-16LE';
  74. } else {
  75. // 统计每个字节的频率
  76. let freq = {};
  77. for (let i = 0; i < bytes.length; i++) {
  78. let b = bytes[i];
  79. freq[b] = freq[b] ? freq[b] + 1 : 1;
  80. }
  81. // 检查是否存在 GBK 的特定字节序列
  82. if (freq[0x81] && freq[0x81] > 0 && freq[0x40] && freq[0x40] > 0) {
  83. return 'GBK';
  84. }
  85. // 如果没有特定的 GBK 字节序列,则假设为 UTF-8
  86. return 'UTF-8';
  87. }
  88. }