如何在JavaScript中将十进制值转换为十六进制值?
当前回答
限制/填充到一组字符数:
function decimalToHex(decimal, chars) {
return (decimal + Math.pow(16, chars)).toString(16).slice(-chars).toUpperCase();
}
其他回答
如果数字是负数?
这是我的版本。
function hexdec (hex_string) {
hex_string=((hex_string.charAt(1)!='X' && hex_string.charAt(1)!='x')?hex_string='0X'+hex_string : hex_string);
hex_string=(hex_string.charAt(2)<8 ? hex_string =hex_string-0x00000000 : hex_string=hex_string-0xFFFFFFFF-1);
return parseInt(hex_string, 10);
}
AFAIK评论57807是错误的,应该是这样的:var hex=数字(d).toString(16);而不是var hex=parseInt(d,16);
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;
}
问题基本上是需要多少填充零。
如果您希望从数字1和17中选择字符串01和11。最好使用Buffer作为桥,用它将数字转换为字节,然后十六进制只是它的输出格式。字节组织由Buffer函数很好地控制,如writeUInt32BE、writeInt16LE等。
import { Buffer } from 'buffer';
function toHex(n) { // 4byte
const buff = Buffer.alloc(4);
buff.writeInt32BE(n);
return buff.toString('hex');
}
> toHex(1)
'00000001'
> toHex(17)
'00000011'
> toHex(-1)
'ffffffff'
> toHex(-1212)
'fffffb44'
> toHex(1212)
'000004bc'
以下是我的解决方案:
hex = function(number) {
return '0x' + Math.abs(number).toString(16);
}
问题是:“如何在JavaScript中将十进制转换为十六进制”。虽然这个问题没有指定十六进制字符串应该以0x前缀开头,但编写代码的任何人都应该知道,0x被添加到十六进制代码中,以将十六进制代码与编程标识符和其他数字区分开来(1234可以是十六进制、十进制甚至八进制)。
因此,为了正确回答这个问题,为了编写脚本,必须添加0x前缀。
Math.abs(N)函数将负转换为正,作为一个额外的好处,它看起来不像是有人在碎木机上运行它。
我想要的答案应该有一个字段宽度说明符,因此我们可以显示8/16/32/64位值,就像您在十六进制编辑应用程序中看到的那样。这才是真正正确的答案。
任意精度
此解决方案接受输入的十进制字符串,并返回十六进制字符串。支持小数。算法
将数字拆分为符号(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));
推荐文章
- 如何清除所有<div>的内容在一个父<div>?
- 检测用户何时离开网页的最佳方法?
- 当“模糊”事件发生时,我如何才能找到哪个元素的焦点去了*到*?
- React不会加载本地图像
- 如何将Blob转换为JavaScript文件
- 在另一个js文件中调用JavaScript函数
- 如何在svg元素中使用z索引?
- 如何求一个数的长度?
- 跨源请求头(CORS)与PHP头
- 如何用Express/Node以编程方式发送404响应?
- parseInt(null, 24) === 23…等等,什么?
- JavaScript变量声明在循环外还是循环内?
- 元素在“for(…in…)”循环中排序
- 在哪里放置JavaScript在HTML文件?
- 什么时候.then(success, fail)被认为是承诺的反模式?