尝试使用 Discord bot 将用户消息从十进制转换为十六进制

Trying to convert users message into hex from decimal using Discord bot

好的,我有这个

Commands.hex = {
  name: 'hex',
  help: "I'll convert your steamid for you",
  timeout: 10,
  level: 0,
  fn: function (msg, suffix) {
    msg.reply('Steam64').then((m) => {
      m.edit('<@' + msg.author.id + '>, Steam ID Converted: ' + suffix.toString(16)).slice(-2).toUpperCase()
    })
  }
}

我正在努力让它做这个网站做的事 http://www.binaryhexconverter.com/decimal-to-hex-converter

我只是想让它为我的 discord 机器人转换,谢谢!

事实证明,您的值:76561198262006743 比 Number.MAX_SAFE_VALUE 大得多,即 (2^53 -1)。这将在尝试进行算术运算时导致未定义的行为。

例如,在 Google Chrome 上,当仅在控制台中输入数字并按回车键时,该值变为 76561198262006740(注意末尾的 3 变为 0),这意味着十六进制转换也不正确。

一个简单的解决方案是,因为您已经拥有字符串形式的值,所以执行您自己的十进制-> 十六进制转换。

他可以在这里找到一个这样的算法:

Number#toString(16)dec2hex(String)的结果小对比:

function dec2hex(str){ // .toString(16) only works up to 2^53
    var dec = str.toString().split(''), sum = [], hex = [], i, s
    while(dec.length){
        s = 1 * dec.shift()
        for(i = 0; s || i < sum.length; i++){
            s += (sum[i] || 0) * 10
            sum[i] = s % 16
            s = (s - sum[i]) / 16
        }
    }
    while(sum.length){
        hex.push(sum.pop().toString(16))
    }
    return hex.join('')
}

num = "76561198262006743"

console.log("dec2Hex: " + dec2hex(num))

console.log("toString: " + parseInt(num).toString(16))