Js字节byte处理_进制转换

更新日期: 2019-04-27阅读: 15k标签: 字节

获取byte的高4位bit和低4位bit

function getHeight4(ata){//获取高四位
    int height;
    height = ((data & 0xf0) >> 4);
    return height;
}

function getLow4(data){//获取低四位
    int low;
    low = (data & 0x0f);
    return low;
}


高4位和低4位合并

1字节 = 高4位(空格)低4位
例如:00001001 = 0000 1001

二进制转换成16进制
1001(二进制) 转换 0x09(十六进制)


十六进制字符串转字节数组

/**
   * 十六进制字符串转字节数组
   * 每2个字符串转换
   * 100102030405060708 转为 [16, 1, 2, 3, 4, 5, 6, 7, 8]
   * @param {String} str 符合16进制字符串
   */
  Str2Bytes(str) {
    var pos = 0;
    var len = str.length;
    if (len % 2 != 0) {
      return null;
    }
    len /= 2;
    var hexA = new Array();
    for (var i = 0; i < len; i++) {
      var s = str.substr(pos, 2);
      var v = parseInt(s, 16);
      hexA.push(v);
      pos += 2;
    }
    return hexA;
  },


字节数组转十六进制字符串

/**
   * 字节数组转十六进制字符串
   * [16, 1, 2, 3, 4, 5, 6, 7, 8] 转换 100102030405060708
   * @param {Array} arr 符合16进制数组
   */
  Bytes2Str(arr) {
    var str = "";
    for (var i = 0; i < arr.length; i++) {
      var tmp = arr[i].toString(16);
      if (tmp.length == 1) {
        tmp = "0" + tmp;
      }
      str += tmp;
    }
    return str;
  },


十六进制字符串转数组

 /**
   * 十六进制字符串转数组
   * 1185759ac35a91143f97037002b1a266 转换 ["11", "85", "75", "9a", "c3", "5a", "91", "14", "3f", "97", "03", "70", "02", "b1", "a2", "66"]
   * @param {String} str 十六进制字符串
   */
  Str2Arr(str) {
    var pos = 0;
    var len = str.length;
    if (len % 2 != 0) {
      return null;
    }
    len /= 2;
    var hexA = new Array();
    for (var i = 0; i < len; i++) {
      var s = str.substr(pos, 2);
      hexA.push(s);
      pos += 2;
    }
    return hexA;
  },


十六进制数组进行异或

/**
   * 十六进制数组进行异或
   * @param {Array} arr 十六进制数组
   */
  BytesDes(arr) {
    var des = arr[0]
    for (var i = 0; i < arr.length; i++) {
      des ^= arr[i]
    }
    return des
  },


十进制转十六进制

/**
   * 十进制转十六进制
   * 15 转 0F
   * @param {Number} num 十进制数字
   */
  toHex(num) {
    return ("0" + (Number(num).toString(16))).slice(-2).toUpperCase()
  }


二进制转十六进制

/**
   * 二进制转十六进制
   * 00001001 转 09
   * @param {String} str 二进制字符串
   */
  binTohex(str) {
    let hex_array = [{ key: 0, val: "0000" }, { key: 1, val: "0001" }, { key: 2, val: "0010" }, { key: 3, val: "0011" }, { key: 4, val: "0100" }, { key: 5, val: "0101" }, { key: 6, val: "0110" }, { key: 7, val: "0111" },
    { key: 8, val: "1000" }, { key: 9, val: "1001" }, { key: 'a', val: "1010" }, { key: 'b', val: "1011" }, { key: 'c', val: "1100" }, { key: 'd', val: "1101" }, { key: 'e', val: "1110" }, { key: 'f', val: "1111" }]
    let value = ''
    let list = []
    if (str.length % 4 !== 0) {
      let a = "0000"
      let b = a.substring(0, 4 - str.length % 4)
      str = b.concat(str)
    }
    while (str.length > 4) {
      list.push(str.substring(0, 4))
      str = str.substring(4);
    }
    list.push(str)
    for (let i = 0; i < list.length; i++) {
      for (let j = 0; j < hex_array.length; j++) {
        if (list[i] == hex_array[j].val) {
          value = value.concat(hex_array[j].key)
          break
        }
      }
    }
    return value
  }

链接: https://fly63.com/article/detial/3076

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!