如何在JavaScript中将十进制值转换为十六进制值?
当前回答
如果您想将数字转换为RGBA颜色值的十六进制表示,我发现这是以下几个提示的最有用组合:
function toHexString(n) {
if(n < 0) {
n = 0xFFFFFFFF + n + 1;
}
return "0x" + ("00000000" + n.toString(16).toUpperCase()).substr(-8);
}
其他回答
对于任何感兴趣的人,这里有一个JSFiddle比较了这个问题的大多数答案。
下面是我最终采用的方法:
function decToHex(dec) {
return (dec + Math.pow(16, 6)).toString(16).substr(-6)
}
此外,请记住,如果您希望将十进制转换为十六进制,以便在CSS中用作颜色数据类型,那么您可能更喜欢从十进制中提取RGB值并使用RGB()。
例如(JSFiddle):
let c = 4210330 // your color in decimal format
let rgb = [(c & 0xff0000) >> 16, (c & 0x00ff00) >> 8, (c & 0x0000ff)]
// Vanilla JS:
document..getElementById('some-element').style.color = 'rgb(' + rgb + ')'
// jQuery:
$('#some-element').css('color', 'rgb(' + rgb + ')')
这将#some元素的CSS颜色属性设置为rgb(64、62、154)。
任意精度
此解决方案接受输入的十进制字符串,并返回十六进制字符串。支持小数。算法
将数字拆分为符号(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));
var number = 3200;
var hexString = number.toString(16);
16是基数,十六进制数中有16个值:-)
如何在JavaScript中将十进制转换为十六进制
我没能找到一个非常干净/简单的十进制到十六进制的转换,它不涉及一堆函数和数组。。。所以我必须自己做这个。
function DecToHex(decimal) { // Data (decimal)
length = -1; // Base string length
string = ''; // Source 'string'
characters = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ]; // character array
do { // Grab each nibble in reverse order because JavaScript has no unsigned left shift
string += characters[decimal & 0xF]; // Mask byte, get that character
++length; // Increment to length of string
} while (decimal >>>= 4); // For next character shift right 4 bits, or break on 0
decimal += 'x'; // Convert that 0 into a hex prefix string -> '0x'
do
decimal += string[length];
while (length--); // Flip string forwards, with the prefixed '0x'
return (decimal); // return (hexadecimal);
}
/* Original: */
D = 3678; // Data (decimal)
C = 0xF; // Check
A = D; // Accumulate
B = -1; // Base string length
S = ''; // Source 'string'
H = '0x'; // Destination 'string'
do {
++B;
A& = C;
switch(A) {
case 0xA: A='A'
break;
case 0xB: A='B'
break;
case 0xC: A='C'
break;
case 0xD: A='D'
break;
case 0xE: A='E'
break;
case 0xF: A='F'
break;
A = (A);
}
S += A;
D >>>= 0x04;
A = D;
} while(D)
do
H += S[B];
while (B--)
S = B = A = C = D; // Zero out variables
alert(H); // H: holds hexadecimal equivalent
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();}
推荐文章
- 一元加/数字(x)和parseFloat(x)之间的区别是什么?
- angularjs中的compile函数和link函数有什么区别
- 删除绑定中添加的事件监听器
- 很好的初学者教程socket.io?
- HtmlSpecialChars在JavaScript中等价于什么?
- React: 'Redirect'没有从' React -router-dom'中导出
- 如何在React中使用钩子强制组件重新渲染?
- 我如何使用Jest模拟JavaScript的“窗口”对象?
- 我如何等待一个承诺完成之前返回一个函数的变量?
- 在JavaScript中根据键值查找和删除数组中的对象
- 使嵌套JavaScript对象平放/不平放的最快方法
- 如何以及为什么'a'['toUpperCase']()在JavaScript工作?
- 有Grunt生成index.html不同的设置
- 文档之间的区别。addEventListener和window。addEventListener?
- 如何检查动态附加的事件监听器是否存在?