JavaScript 将长十进制转换为十六进制并返回

JavaScript convert long decimal to hex and back

序言

我在使用 JavaScript 时遇到了一些有趣的事情,但我找不到原因。 我很确定是我,而不是 JavaScript.

问题

当将整数72058145430680163(18位)转换为十六进制时,我得到了十六进制表示10000806191b260

尽管使用 Dec2Hex converter RapidTables 我得到 10000806191b263。后者是正确的数字 - 比我使用 Javascript.

的结果多 3

此外,在将我的结果 转换回 int 时,它 return 72058145430680160 - 比我的原始源整数少 3。

Javascript用于转换

从十进制转换为十六进制:

(72058145430680163).toString(16);

从十六进制转换为十进制(向后):

parseInt((72058145430680163).toString(16), 16)

我做错了什么?

您超出了 JavaScript 上限。请改用 BigInt。

BigInt("72058145430680163").toString('16'); // Returns 10000806191b263 as String

这就是整个往返行程

BigInt("0x" + BigInt("72058145430680163").toString('16')).toString() // Retuns 72058145430680163

这里有更多关于 BigInt 的信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt

你的号码太大 Javascript。所以你看到的是一些溢出问题。你可以做的是利用 Javascript 数据类型 BigInt.

所以在实践中,你可以这样做:

BigInt("72058145430680163").toString(16);