写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
}