如何在JavaScript中将十进制值转换为十六进制值?
当前回答
限制/填充到一组字符数:
function decimalToHex(decimal, chars) {
return (decimal + Math.pow(16, chars)).toString(16).slice(-chars).toUpperCase();
}
其他回答
我还没有找到一个明确的答案,如果不检查它是负数还是正数,那就是使用二的补码(包括负数)。为此,我展示了一个字节的解决方案:
((0xFF + number +1) & 0x0FF).toString(16);
您可以将此指令用于任意数量的字节,只需在相应的位置添加FF。例如,设置为两个字节:
((0xFFFF + number +1) & 0x0FFFF).toString(16);
如果要将数组整数强制转换为十六进制字符串:
s = "";
for(var i = 0; i < arrayNumber.length; ++i) {
s += ((0xFF + arrayNumber[i] +1) & 0x0FF).toString(16);
}
您可以在ECMAScript 6中执行以下操作:
const toHex = num => (num).toString(16).toUpperCase();
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();}
如果要转换大整数,即大于Number.MAX_SAFE_INTEGER--9007199254740991的数字,则可以使用以下代码
const-hugeNumber=“9007199254740991873839”//确保其在字符串中const hexOfHugeNumber=BigInt(hugeNumber).toString(16);console.log(hexOfHugeNumber)
我正在一个相当大的循环中转换为十六进制字符串,所以我尝试了几种技术以找到最快的方法。我的要求是得到一个固定长度的字符串,并正确编码负值(-1=>ff..f)。
Simple.toString(16)不适合我,因为我需要正确编码负值。以下代码是迄今为止我在1-2字节值上测试的最快的代码(请注意,符号定义了要获得的输出符号的数量,即对于4字节整数,它应该等于8):
var hex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
function getHexRepresentation(num, symbols) {
var result = '';
while (symbols--) {
result = hex[num & 0xF] + result;
num >>= 4;
}
return result;
}
它在1-2字节的数字上比.toString(16)执行得更快,在更大的数字上(当符号>=6时)执行得更慢,但仍应优于正确编码负值的方法。
推荐文章
- 如何使用Jest测试对象键和值是否相等?
- 将长模板文字行换行为多行,而无需在字符串中创建新行
- 如何在JavaScript中映射/减少/过滤一个集?
- Bower: ENOGIT Git未安装或不在PATH中
- 添加javascript选项选择
- 在Node.js中克隆对象
- 为什么在JavaScript的Date构造函数中month参数的范围从0到11 ?
- 使用JavaScript更改URL参数并指定默认值
- 在window.setTimeout()发生之前取消/终止
- 如何删除未定义和空值从一个对象使用lodash?
- 检测当用户滚动到底部的div与jQuery
- 在JavaScript中检查字符串包含另一个子字符串的最快方法?
- 检测视口方向,如果方向是纵向显示警告消息通知用户的指示
- ASP。NET MVC 3 Razor:在head标签中包含JavaScript文件
- 禁用从HTML页面中拖动图像