Wie speichere ich eine Zahl als bytes16 in einem Smart Contract und rufe die Zahl in Javascript ab?

Ich habe den folgenden intelligenten Vertrag, um das Problem zu klären.

pragma solidity ^0.4.17;

contract Test {
    bytes16 number;

    function getNumber() public view returns(bytes16) {
        return number;
    }

    function setNumber(bytes16 _number) public {
        number = _number;
    }
}

Also mit Javascript konvertiere ich eine Zahl in eine Hex-Zeichenfolge wie so let hex = ‘0x’ + (3456).toString(16)where hexis 0xd80. Dann übergebe ich den Wert als Argument an setNumber. Die Herausforderung besteht darin, wenn ich anrufe getNumber, was ich im Gegenzug erhalte, ist  0x0d800000000000000000000000000000. Wie 28 Nullen werden an das Ende angehängt. Das Analysieren ergibt einen falschen Wert. Ich parse so let num = parseInt(‘0x0d800000000000000000000000000000’, 16). Und ich bekomme 1.7944577943096364e+37. Wie kann man aus diesem '0x0d80000000000000000000000000000' den richtigen Wert bekommen oder wie man die Zahl als bytes16 ohne die zusätzlichen Nullstellen speichert.

Antworten (1)

Sie müssen es links auffüllen. Wenn Sie übergeben 0xd80, wird es als Teil des Codierungsprozesses richtig aufgefüllt (um 16 Bytes zu belegen).

let argument = "0x" + web3.padLeft("d80", 32);

Das sollte dir einfallen0x00000000000000000000000000000D80