2017-11-06 5 views
0

Ok, so habe ich dieseDer Versuch, Benutzer Nachricht in hex aus Dezimalzahl mit 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() 
    }) 
    } 
} 

ich versuche, es zu bekommen zu tun, was diese Website wird http://www.binaryhexconverter.com/decimal-to-hex-converter

picture of what it's doing

zu konvertieren

Ich versuche nur, es für meinen Diskord-Bot zu konvertieren, danke!

+0

Welche Art bedeutet 'Suffix' kommen, wie? Wenn es ein String ist, dann stelle ich mir Sie anrufen müssen 'parseInt' auf sie zum ersten Mal seit' toString (16) 'wird nur dann richtig funktionieren, wenn Suffix ist schon eine ganze Zahl. –

+0

Suffix ist die Nachricht des Benutzers, glaube ich. wie Sie sehen, es sagt !! hex 76561198205234861 @ KhauriMcClain –

+0

Ja, ich verstehe. Aber höchstwahrscheinlich wird die Nachricht des Benutzers eine Zeichenkette anstelle einer Ganzzahl übergeben, und daher wird der Aufruf von toString (16) in einer Zeichenkette nicht funktionieren. '(10) .toString (16)' zurückkehren wird "a", aber '("10"). ToString (16)' zurückkehren wird "10" –

Antwort

1

Wie macht er Ihren Wert aus: 76561198262006743 ist viel größer als Number.MAX_SAFE_VALUE, die (2^53 -1). Dies führt zu einem undefinierten Verhalten, wenn versucht wird, arithmetisch zu arbeiten.

Zum Beispiel in Google Chrome bei der Eingabe nur die Zahl in die Konsole und drücken Sie die Eingabetaste, wurde dieser Wert 76561198262006740 (beachten Sie die 3 am Ende wurde eine 0), was bedeutete, die Hex-Konvertierung war auch falsch.

Eine einfache Lösung ist, da Sie bereits den Wert als String haben, wäre eine eigene Dezimal-> hex Umwandlung auszuführen.

Ein solcher Algorithmus kann er hier gefunden: https://stackoverflow.com/a/21668344/8237835

Ein kleiner Vergleich der Ergebnisse von Number#toString(16) und dec2hex(String): Sie

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))