sql >> Databasteknik >  >> NoSQL >> MongoDB

JavaScript - Konvertera 24-siffrigt hexadecimalt tal till decimaltal, lägg till 1 och konvertera sedan tillbaka?

Den här versionen kommer att returnera en sträng lika lång som inmatningssträngen, så överflödet ignoreras om inmatningen är något i stil med "ffffffff".

function hexIncrement(str) {
    var hex = str.match(/[0-9a-f]/gi);
    var digit = hex.length;
    var carry = 1;

    while (digit-- && carry) {
        var dec = parseInt(hex[digit], 16) + carry;
        carry = Math.floor(dec / 16);
        dec %= 16;
        hex[digit] = dec.toString(16);
    }
    return(hex.join(""));
}

document.write(hexIncrement("55a98f19b27585d81922ba0b") + "<BR>");
document.write(hexIncrement("ffffffffffffffffffffffff"));

Denna version kan returnera en sträng som är 1 tecken längre än inmatningssträngen, eftersom indata som "ffffffff" överförs till "100000000".

function hexIncrement(str) {
    var hex = str.match(/[0-9a-f]/gi);
    var digit = hex.length;
    var carry = 1;

    while (digit-- && carry) {
        var dec = parseInt(hex[digit], 16) + carry;
        carry = Math.floor(dec / 16);
        dec %= 16;
        hex[digit] = dec.toString(16);
    }
    if (carry) hex.unshift("1");
    return(hex.join(""));
}

document.write(hexIncrement("55a98f19b27585d81922ba0b") + "<BR>");
document.write(hexIncrement("ffffffffffffffffffffffff"));

Jag var nyfiken på att se om user2864740:s förslag att arbeta med 12-siffriga bitar skulle ge någon fördel. Till min förvåning, även om koden ser mer komplicerad ut, är den faktiskt ungefär dubbelt så snabb. Men den första versionen körs 500 000 gånger per sekund också, så det är inte som du kommer att märka det i den verkliga världen.

function hexIncrement(str) {
    var result = "";
    var carry = 1;
    while (str.length && carry) {
        var hex = str.slice(-12);
        if (/^f*$/i.test(hex)) {
            result = hex.replace(/f/gi, "0") + result;
            carry = 1;
        } else {
            result = ("00000000000" + (parseInt(hex, 16) + carry).toString(16)).slice(-hex.length) + result;
            carry = 0;
        }
        str = str.slice(0,-12);
    }
    return(str.toLowerCase() + (carry ? "1" : "") + result);
}

document.write(hexIncrement("55a98f19b27585d81922ba0b") + "<BR>");
document.write(hexIncrement("000000000000ffffffffffff") + "<BR>");
document.write(hexIncrement("0123456789abcdef000000000000ffffffffffff"));


  1. redis vs hazelcast

  2. Dela sessioner mellan php och nod

  3. DeprecationWarning:Lyssna på händelser i Db-klassen har fasats ut och kommer att tas bort i nästa större version

  4. Det tar tid att hämta mongoDB-referenser