各种进制编码的转化

自古美人都是妖i 提交于 2019-12-21 06:01:04
/**
     * 解析utf8字符串到16进制
     */
    function parseUtf8StringToHex(input) {
      input = unescape(encodeURIComponent(input));
      var length = input.length;
      // 转换到字数组
      var words = [];
      for (var i = 0; i < length; i++) {
        words[i >>> 2] |= (input.charCodeAt(i) & 0xff) << 24 - i % 4 * 8;
      }
      // 转换到16进制
      var hexChars = [];
      for (var _i = 0; _i < length; _i++) {
        var bite = words[_i >>> 2] >>> 24 - _i % 4 * 8 & 0xff;
        hexChars.push((bite >>> 4).toString(16));
        hexChars.push((bite & 0x0f).toString(16));
      }
      return hexChars.join('');
    }

    /**
     * 解析arrayBuffer到16进制字符串
     */
    function parseArrayBufferToHex(input) {
      return Array.prototype.map.call(new Uint8Array(input), function(x) {
        return ('00' + x.toString(16)).slice(-2);
      }).join('');
    }

    /**
     * 补全16进制字符串
     */
    function leftPad(input, num) {
      if (input.length >= num) return input;

      return new Array(num - input.length + 1).join('0') + input;
    }

    /**
     * 转成16进制串
     */
    function arrayToHex(arr) {
      var words = [];
      var j = 0;
      for (var i = 0; i < arr.length * 2; i += 2) {
        words[i >>> 3] |= parseInt(arr[j], 10) << 24 - i % 8 * 4;
        j++;
      }

      // 转换到16进制
      var hexChars = [];
      for (var _i2 = 0; _i2 < arr.length; _i2++) {
        var bite = words[_i2 >>> 2] >>> 24 - _i2 % 4 * 8 & 0xff;
        hexChars.push((bite >>> 4).toString(16));
        hexChars.push((bite & 0x0f).toString(16));
      }

      return hexChars.join('');
    }

    /**
     * 转成utf8串
     */
    function arrayToUtf8(arr) {
      var words = [];
      var j = 0;
      for (var i = 0; i < arr.length * 2; i += 2) {
        words[i >>> 3] |= parseInt(arr[j], 10) << 24 - i % 8 * 4;
        j++;
      }

      try {
        var latin1Chars = [];

        for (var _i3 = 0; _i3 < arr.length; _i3++) {
          var bite = words[_i3 >>> 2] >>> 24 - _i3 % 4 * 8 & 0xff;
          latin1Chars.push(String.fromCharCode(bite));
        }

        return decodeURIComponent(escape(latin1Chars.join('')));
      } catch (e) {
        throw new Error('Malformed UTF-8 data');
      }
    }

    /**
     * 转成ascii码数组
     */
    function hexToArray(hexStr) {
      var words = [];
      var hexStrLength = hexStr.length;

      if (hexStrLength % 2 !== 0) {
        hexStr = leftPad(hexStr, hexStrLength + 1);
      }

      hexStrLength = hexStr.length;

      for (var i = 0; i < hexStrLength; i += 2) {
        words.push(parseInt(hexStr.substr(i, 2), 16)); 
      }
      return words;
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!