javascript进制之间转换、异或运算(适用与微信小程序)

十进制数组转成以空格隔开的十六进制字符串

[1,2,3,4,5] => ‘01 02 03 04 05’

const decArrayToHexStr = (array) => {
  var hexStr = ""
  for(var i = 0; i < array.length; i++) {
      var str = array[i].toString(16).toUpperCase();
      if (str.length < 2) {
          str = "0" + str
      }
      hexStr = hexStr + str + " "
  }
  return hexStr.substr(0, hexStr.length - 1)
}

以空格隔开的十六进制字符串转为十进制数组

‘01 02 03 04 05’ ==> [1, 2, 3, 4, 5]

const hexStrToDecArray = (str) => {
  var strArray = str.split(" ")
  var decArray = []
  for(var i = 0; i < strArray.length; i++) {
      decArray.push(parseInt(strArray[i], 16))
  }
  return decArray
}

二进制字符串转十六进制

const bin_to_hex(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
}

十六进制字符串转二进制

const hex_to_bin = (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=""
  for(let i = 0; i < str.length; i++) {
      for(let j = 0; j < hex_array.length; j++){
          if(str.charAt(i).toLowerCase() == hex_array[j].key){
              value = value.concat(hex_array[j].val)
              break
          }
      }
  }
  return value
}

异或运算

const ExclusiveOR = (a, b) => {
  let A = hex_to_bin(a)
  let B = hex_to_bin(b)
  let o = "00000000000000000000000000000000000"
  if (A.toString().length > B.toString().length) {
      let c = A.toString().length - B.toString().length
      B = o.substr(0,c).concat(B)
  } else if (A.toString().length < B.toString().length) {
      let c = B.toString().length - A.toString().length
      A = o.substr(0,c).concat(A)
  }
  let d = ""
  for (let i = 0; i < A.toString().length; i++) {
      if (A.toString()[i]==B.toString()[i]) {
          let q="0"
          d = d.concat(q)
      } else{
          let p="1"
          d = d.concat(p)
      }
  }
  // 上面的2进制转16进制方法
  return bin_to_hex(d)
}

希望能够帮大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗_三金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值