JS 数字(正数或负数)转换为任意长度(可配置是否含符号位)的16进制字符串

写nodejs应用时,需要把数字转换成对应长度的16进制形式(需要有带符号类型或者不带符号类型),而JS又没有自带的函数可以很好的使用,就自己写了一个万能转换函数,可以规定转换为多少字节的12进制字符串形式,可以规定是否带符号,使用这个函数可以很方便把一个数字转换成U8 S8 U16 S16 U32 S32等类型的16进制形式。示例如下

函数实现如下,希望成功用上的小伙伴给个点赞或评论,有任何问题也欢迎留言回复:

 /*将数字转换为16进制形式
  * val:传入的数字
  * length:需要转化为几个字节的表示形式
  * signed:是否带符号位
  */
function parseHex(val,length,signed){
	var num = parseInt(val);
	var hex_str = '';
	var hex_str_length = length*2;//1个字节=2个16进制字符
	var min=0;
	var max=0;
	if(signed){//带符号位
		min = -1*Math.pow(2,8*length-1);
		max = Math.pow(2,8*length-1)-1;
		if(num<min || num>max){//数字超出转换范围
			console.warn(`out of range,min is ${min},max is ${max},but val is ${num}.`)
		}else if(num<0){//传入合法负数
			//计算补码
			hex_str = (Math.pow(2,8*length)+num).toString(16);
			if(hex_str.length<hex_str_length){
				hex_str = 'f'.repeat(hex_str_length-hex_str.length)+ hex_str;
			}
		}else{//传入合法正数
			hex_str = num.toString(16);
			if(hex_str.length<hex_str_length){
				hex_str = '0'.repeat(hex_str_length-hex_str.length)+ hex_str;
			}
		}
	}else{//不带符号位
		min = 0;
		max = Math.pow(2,8*length)-1;
		if(num<min || num>max){//数字超出转换范围
			console.warn(`out of range,min is ${min},max is ${max},but val is ${num}.`)
		}else{//传入合法正数
			hex_str = num.toString(16);
			if(hex_str.length<hex_str_length){
				hex_str = '0'.repeat(hex_str_length-hex_str.length)+ hex_str;
			}
		}
	}
	return hex_str
  }

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值