如何在JavaScript中将十进制值转换为十六进制值?
当前回答
如果数字是负数?
这是我的版本。
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);
}
其他回答
正如公认的答案所述,从十进制转换为十六进制的最简单方法是var hex=dec.toString(16)。但是,您可能更喜欢添加字符串转换,因为它可以确保像“12”.toString(16)这样的字符串表示正确工作。
// Avoids a hard-to-track-down bug by returning `c` instead of `12`
(+"12").toString(16);
为了扭转这个过程,您也可以使用下面的解决方案,因为它更短。
var dec = +("0x" + hex);
在Google Chrome和Firefox中,速度似乎较慢,但在Opera中则明显更快。看见http://jsperf.com/hex-to-dec.
以下是我的解决方案:
hex = function(number) {
return '0x' + Math.abs(number).toString(16);
}
问题是:“如何在JavaScript中将十进制转换为十六进制”。虽然这个问题没有指定十六进制字符串应该以0x前缀开头,但编写代码的任何人都应该知道,0x被添加到十六进制代码中,以将十六进制代码与编程标识符和其他数字区分开来(1234可以是十六进制、十进制甚至八进制)。
因此,为了正确回答这个问题,为了编写脚本,必须添加0x前缀。
Math.abs(N)函数将负转换为正,作为一个额外的好处,它看起来不像是有人在碎木机上运行它。
我想要的答案应该有一个字段宽度说明符,因此我们可以显示8/16/32/64位值,就像您在十六进制编辑应用程序中看到的那样。这才是真正正确的答案。
问题基本上是需要多少填充零。
如果您希望从数字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'
您可以在ECMAScript 6中执行以下操作:
const toHex = num => (num).toString(16).toUpperCase();
var number = 3200;
var hexString = number.toString(16);
16是基数,十六进制数中有16个值:-)