js实现10进制与16进制互转的所有方法

一、16进制转有符号的10进制整数

function hex2int(hexStr) {
  let twoStr = parseInt(hexStr,16).toString(2); // 将十六转十进制,再转2进制
  let bitNum = hexStr.length * 4; // 1个字节 = 8bit ,0xff 一个 "f"就是4位
  if(twoStr.length < bitNum){
    while(twoStr.length < bitNum){
      twoStr = "0" + twoStr;
    }
  }
  if(twoStr.substring(0,1) == "0"){
    // 正数
    twoStr = parseInt(twoStr,2); // 二进制转十进制
    return twoStr;
  }else{
    // 负数
    let twoStr_unsign = "";

    console.log("hex2int--->"+parseInt(twoStr,2));
    twoStr = parseInt(twoStr,2) - 1; // 补码:(负数)反码+1,符号位不变;相对十进制来说也是 +1,但这里是负数,+1就是绝对值数据-1
    console.log("hex2int--->"+twoStr);

    twoStr = twoStr.toString(2);
    twoStr_unsign = twoStr.substring(1,bitNum); // 舍弃首位(符号位)
    // 去除首字符,将0转为1,将1转为0   反码
    twoStr_unsign = twoStr_unsign.replace(/0/g, "z");
    twoStr_unsign = twoStr_unsign.replace(/1/g, "0");
    twoStr_unsign = twoStr_unsign.replace(/z/g, "1");
    
    console.log("hex2int--->"+twoStr_unsign);
    console.log("hex2int--->"+(-twoStr_unsign));
    twoStr = parseInt(-twoStr_unsign, 2);
    return twoStr;
  }
}

二、十进制负数转十六进制

const a = -100;
const b = (Math.pow(2,32) +  a).toString(16)

三、16进制转成小数点

function hexStringToFloat64(hex) {  
    // 确保十六进制字符串是8个字符的倍数(对于64位浮点数来说是16个字符)  
    if (hex.length !== 16) {  
        throw new Error('Hex string must be 16 characters long');  
    }  
  
    // 创建一个8字节的ArrayBuffer  
    let buffer = new ArrayBuffer(8);  //创建了一个8个字节二级制的缓冲区
    let view = new DataView(buffer);  //用于读写ArrayBuffer中的数据
  
    // 将十六进制字符串的每两个字符转换为一个字节,并写入ArrayBuffer  
    for (let i = 0; i < 8; i++) {
		let byteString = hex.substr((7 - i) * 2, 2);// 因为是大端字节序,注意这里的索引调整  
		let byteNumber = parseInt(byteString, 16);
		view.setUint8(i, byteNumber);
    }  
  
    // 使用getFloat64方法从DataView中获取64位浮点数  
    return view.getFloat64(0);  
} 

四、每两位10进制转为16进制 

// 每两位转为16进制
export function decimalStringToHexPairs(str) {
	console.log('strstr',str);
	let result = '';
	for (let i = 0; i <= str.length; i += 2) {
		// 检查是否还有足够的字符来形成一个两位的字符串  
		if (i + 1 < str.length) {
			result += (parseInt(str.substring(i, i + 2)).toString(16).padStart(2, '0'));
		}
	}
	console.log('result',result);
	return result;
}

五、字符串转换16进制

			stringToHex(str,replaceId) {
				console.log('stringstr', str);
				var val = "";
				for (var i = 0; i < str.length; i++) {
					if (val == "")
						val = str.charCodeAt(i).toString(16);
					else
						val += str.charCodeAt(i).toString(16);
				}
				return val;
			},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值