如何在JavaScript中将十进制值转换为十六进制值?
当前回答
任意精度
此解决方案接受输入的十进制字符串,并返回十六进制字符串。支持小数。算法
将数字拆分为符号(s)、整数部分(i)和小数部分(f),例如,对于-123.75,我们得到s=真,i=123,f=75整数部分到十六进制:如果i='0'停止取模:m=i%16(任意精度)将m转换为十六进制数字并放入结果字符串对于下一步,计算整数部分i=i/16(任意精度)小数部分计数小数n乘以k=f*16(任意精度)将k拆分为n个数字的右侧部分并将其置于f,将其余数字的左侧部分拆分为d将d转换为十六进制并添加到结果中。当结果小数位数足够时完成
//@param decStr-非负整数字符串//@param除数-正整数函数dec2Hex任意(decStr,fracDigits=0){//Helper:将任意精度数除以js数//@param decStr-非负整数字符串//@param除数-正整数函数arbDivision(decStr,除数){ //算法https://www.geeksforgeeks.org/divide-large-number-represented-string/让ans=“”;设idx=0;设temp=+decStr[idx];而(temp<除数)temp=temp*10++decStr[++idx];而(decStr.length>idx){ans+=(温度/除数)|0;temp=(temp%除数)*10++decStr[++idx];} 如果(ans.length==0)返回“0”;返回ans;} //Helper:任意精度数的计算模块//@param decStr-非负整数字符串//@param mod-正整数函数arbMod(decStr,mod){//算法https://www.geeksforgeeks.org/how-to-compute-mod-of-a-big-number/设res=0;for(设i=0;i<decStr.length;i++)res=(res*10++decStr[i])%模;回报率;} //Helper:将任意精度整数乘以js数//@param decStr-非负整数字符串//@param mult-正整数函数arbMultiply(decStr,mult){设r=“”;设m=0;对于(设i=decStr.length-1;i>=0;i-){设n=m+mult*(+decStr[i]);r=(i?n%10:n)+rm=n/10|0;}返回r;}//dec2hex算法从这里开始设h=“0123456789abcdef”;//十六进制字母表设m=decStr.match(/-?(.*?)\.(.*)?/)||decStr.匹配(/-?(.*)/);//分离符号,整数,分数设i=m[1]。替换(/^0+/,“”)。替换(/^$/,“0”);//整数部分(无符号和前导零)设f=(m[2]||'0').replace(/0+$/,'').replace(/^$/,'0');//小数部分(不带最后零)设s=decStr[0]=='-';//签名让r=“”;//后果如果(i=='0')r='0';while(i!='0'){//整数部分r=h[arbMod(i,16)]+r;i=arb除法(i,16);}如果(fracDigits)r+=“.”;设n=f.length;对于(设j=0;j<fracDigits;j++){//frac部分设k=arbMultiply(f,16);f=k切片(-n);设d=k.slice(0,k.length-n);r+=d长度?h[+d]:“0”;}return(s?'-':'')+r;}// -----------//测试// -----------让测试=[["0",2],["000",2], ["123",0],["-123",0], ["00.000",2],["255.75",5],["-255.75",5], ["127.999",32], ];console.log('输入标准能力');test.forEach(t=>{让nonArb=(+t[0]).toString(16).padEnd(17,'');设arb=dec2Hex任意(t[0],t[1]);console.log(t[0].padEnd(10,''),nonArb,arb);});//长示例(点后40位)例如=“123456789012345678901234567890.09876543210987654321”console.log(`\nLong示例:`);console.log('dec:',示例);console.log('hex:',dec2Hex任意(例如,40));
其他回答
使用以下命令将数字转换为十六进制字符串:
hexString = yourNumber.toString(16);
并通过以下方式反转该过程:
yourNumber = parseInt(hexString, 16);
如果要转换大整数,即大于Number.MAX_SAFE_INTEGER--9007199254740991的数字,则可以使用以下代码
const-hugeNumber=“9007199254740991873839”//确保其在字符串中const hexOfHugeNumber=BigInt(hugeNumber).toString(16);console.log(hexOfHugeNumber)
下面的代码将十进制值d转换为十六进制。它还允许您向十六进制结果添加填充。因此默认情况下0将变为00。
function decimalToHex(d, padding) {
var hex = Number(d).toString(16);
padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;
while (hex.length < padding) {
hex = "0" + hex;
}
return hex;
}
rgb(255255255)//返回FFFFFFrgb(255255300)//返回FFFFFFrgb(0,0,0)//返回000000rgb(148,0,211)//返回9400D3函数rgb(…值){返回值。reduce((acc,cur)=>{让val=cur>=255?'ff':cur<=0?'00':数字(cur).toString(16);返回acc+(val.length==1?“0”+val:val);},'').toUpperCase();}
为了完整起见,如果您想要负数的二进制补码十六进制表示,可以使用零填充右移>>运算符。例如:
> (-1).toString(16)
"-1"
> ((-2)>>>0).toString(16)
"fffffffe"
然而,有一个限制:JavaScript按位运算符将其操作数视为32位的序列,也就是说,您将得到32位2的补码。
推荐文章
- 给一个数字加上st, nd, rd和th(序数)后缀
- 如何以编程方式触发引导模式?
- setTimeout带引号和不带括号的区别
- 在JS的Chrome CPU配置文件中,'self'和'total'之间的差异
- 用javascript检查输入字符串中是否包含数字
- 如何使用JavaScript分割逗号分隔字符串?
- 在Javascript中~~(“双波浪号”)做什么?
- 谷歌chrome扩展::console.log()从后台页面?
- 未捕获的SyntaxError:
- [].slice的解释。调用javascript?
- jQuery日期/时间选择器
- 我如何预填充一个jQuery Datepicker文本框与今天的日期?
- 数组的indexOf函数和findIndex函数的区别
- jQuery添加必要的输入字段
- Access-Control-Allow-Origin不允许Origin < Origin >