在JavaScript中将整数转换为十六进制字符串

5
我想将数字(整数)转换为十六进制字符串。
2 (0x02) to "\x02"

或者

62 (0x0062) to "\x62"

我应该如何正确地做到这一点?


@Chuck,那样做是不够的^^ - DarkLeafyGreen
这怎么不够好呢? - Keith Nicholas
1
你是认真遇到了在十六进制数中添加 \x 的问题吗? - Keith Nicholas
@KeithNicholas 不是,但我有一个理解上的问题,似乎\x2和\x02之间存在差异。而且我怎么知道0x0062作为字符串是\x62。 - DarkLeafyGreen
如果您查看所示的重复链接,就会发现如何使用任意数量的0填充十六进制数字的实现。 - Keith Nicholas
1
在十六进制中,前导零不会产生任何数值差异。9 == 09 == 009 == 0009…以此类推。我认为你提供字符串的服务有点古怪。 - Chuck
3个回答

15
您可以使用 toString 方法:
a = 64;
a.toString(16); // prints "40" which is the hex value
a.toString(8); // prints "100" which is the octal value
a.toString(2); // prints "1000000" which is the binary value

它必须以“\x62”格式呈现。 - DarkLeafyGreen
a = 64; a = '\x' + a.toString(16); - volter9
你可以轻松地将它们连接起来。 - Ibu
无法使用2,因为OP明确要求函数返回\x02而不是\x2。 - Sharcoux
@Ibu 但这只是视觉上的... \\x30 并不代表实际的字符 0。 如果你打印 console.log('\\x30');,输出结果是 \x30,但如果你打印 console.log('\x30');,你会得到 0(这是十六进制代码的实际表示)。所以 const a = '\x30';const b = '\\x' + '30'; 是不一样的。 - undefined
显示剩余3条评论

3

嗯,看起来您只是想将整数与\x连接起来。

如果是这样,可以像这样:

var number = 62;
var hexStr = '\x' + number.toString(16);

但你在解释方面有些奇怪。

注意:62和0x62不是相同的,0x62代表98。


如果数字等于2怎么办?hexStr将会是\x2,但应该是\x02。 - DarkLeafyGreen
但是有什么区别呢?值仍然是2。如果您需要,我可以给您答案,但没有区别。 - volter9
如果我在Python中这样做,我会得到“无效的\x转义”,而\x02将被接受,因此似乎存在差异... - DarkLeafyGreen
你在问关于JS的问题,好的没关系。只需添加 var hexStr = '\x0' + number.toString(16); - volter9
@volter9 它根本就不起作用...无论是在浏览器控制台还是在命令行界面。你不能简单地"把它们加在一起"。它会给你一个语法错误...Uncaught SyntaxError: Invalid hexadecimal escape sequence这里有些人在发布解决方案之前甚至有没有尝试过...?! - undefined

0

var converted = "\x" + number.toString(16)

这段代码是将一个数值转换为十六进制字符串格式,并使用\x前缀表示该字符串是十六进制编码的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接