JS封装的几个位操作函数和16进制操作函数

位操作

//获取某位的值
function getBit(val,bit){
    /*1 return true; 0 return false*/
    return ((val & (0x1 << bit)) >> bit)==1;
}
//设置位
function setBit(val,bit){
    return val | (0x1 << bit)
}
//清除位
function clearBit(val,bit){
    var a=255;
    for(var i=0;i<=bit;i++){
        a=a<<1;
        if(i>0)a++;
    }
    return val & a;
}
//翻转
function reverseBit(val,bit){
    if(getBit(val,bit)) return clearBit(val,bit);
    else return setBit(val,bit);
}

进制操作

//十进制转16进制操作
var a = 10;
b = a.toString(16);

//补0,如:padNumber(3,2) 返回:03
function padNumber(num, fill) {
    var len = ('' + num).length;
    return (Array(
        fill > len ? fill - len + 1 || 0 : 0
    ).join(0) + num);
}

//可以把带符号数转为整数
function hexToInt(hex) {
    if (hex.length % 2 !== 0) {
        hex = "0" + hex;
    }
    var num = parseInt(hex, 16);
    var maxVal = Math.pow(2, hex.length / 2 * 8);
    if (num > maxVal / 2 - 1) {
        num = num - maxVal;
    }
    return num;
}
/*16进制字符串 每2个字符用一个空格隔开*/
function hexArarryAddSpace(str) {
    var result = '';
    for (var i = 0; i < str.length; i += 2) {
        if (result !== '') result += ' ';
        result += str[i] + str[i + 1];
    }
    return result;
}

/**
字符串转十六进制字符串数组
示例:strToHexStrArray("ebcca2d87c21d65596a3cf304f47add2",2)
返回:["eb", "cc", "a2", "d8", "7c", "21", "d6", "55", "96", "a3", "cf", "30", "4f", "47", "ad", "d2"]
*/
function strToHexStrArray(str, split_len) {
    var array = strToHexArray(str, split_len);
    return arrToHexStrArray(array);
}
/*十进制数组转十六进制数组*/
function arrToHexStrArray(array) {
    var result = [];
    for (var i = 0; i < array.length; i++) {
        if (typeof (array[i]) == 'undefined') {
            console.error('要转为16进制字符串的数组异常,array,i', array, i);
            continue;
        }
        var temp = array[i].toString(16);
        if (temp.length == 1) temp = "0" + temp;
        result.push(temp);
    }
    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程圈子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值