zoukankan      html  css  js  c++  java
  • js 各种进制转换,转ascll码等

    因为近期做小程序,蓝牙连接硬件,需要根据module bus通信协议解析数据,用到了很多标题的算法转换,借此总结一下。

    十六进制转十进制
    function hex_dec(hex) {
        var len = hex.length,
            a = new Array(len),
            code;
        for (var i = 0; i < len; i++) {
            code = hex.charCodeAt(i);
            if (48 <= code && code < 58) {
                code -= 48;
            } else {
                code = (code & 0xdf) - 65 + 10;
            }
            a[i] = code;
        }
        return a.reduce(function (acc, c) {
            acc = 16 * acc + c;
            return acc;
        }, 0);
    } 

    十进制转十六进制

    function dec_hex(val){
    return ("0" + (Number(val).toString(16))).slice(-2).toUpperCase()
    }
    十六进制转二进制(需要借用到hex_dec,也就是需要先转换成十进制再转成二进制)
    function hex_bin(hex, len) {
        var res = hex_dec(hex).toString(2);
        return (Array(len).join(0) + res).slice(-len);
    }

    二进制转十六进制(网上的一种办法)

    function bin_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
      }
    十六进制转ArrayBuffer
    function hex_buf(hexStr) {
        var count = hexStr.length / 2;
        let buffer = new ArrayBuffer(count);
        let dataView = new DataView(buffer);
        for (var i = 0; i < count; i++) {
            var curCharCode = parseInt(hexStr.substr(i * 2, 2), 16);
            dataView.setUint8(i, curCharCode);
        }
        return buffer;
    }
    ArrayBufer转十六进制
    function buf_hex(buffer) { // buffer is an ArrayBuffer
        return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
    }

    十六进制转ASCII码

    function hex_ascll(hexCharCodeStr) {
      var trimedStr = hexCharCodeStr.trim();
      var rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr;
      var len = rawStr.length;
      if (len % 2 !== 0) {
        alert("存在非法字符!");
        return "";
      }
      var curCharCode;
      var resultStr = [];
      for (var i = 0; i < len; i = i + 2) {
        curCharCode = parseInt(rawStr.substr(i, 2), 16);
        resultStr.push(String.fromCharCode(curCharCode));
      }
      return resultStr.join("");
    }
  • 相关阅读:
    iOS版打地鼠游戏源码
    OuNews 简单的新闻客户端应用源码
    安卓DJ113舞曲网应用客户端 项目源码(服务器+客户端)
    博客迁移
    iOS 多张图片保存到相册问题(add multiple images to photo album)
    【转】 iOS 学习之 NSPredicate 模糊、精确、查询
    iOS 设置图片imageView圆角——对图片进行裁剪
    iOS9的那些坑 — — WeiboSDK registerApp启动就崩溃
    关于Debug下的Log打印问题
    Runtime运行时学习(一)
  • 原文地址:https://www.cnblogs.com/naturl/p/15450061.html
Copyright © 2011-2022 走看看