¿Cómo puedo modificar el resultado de bytes32 a uint?

Quiero separar los tres últimos dígitos del hash de encabezado de bloque más reciente y obtener el resultado como uint.

Puedo obtener la respuesta como bytes32 con este código, pero ¿cómo puedo cambiar este resultado a uint?

contract test
{
    bytes32 lastblockhashused;
    uint lastblocknumberused;

    function test()
    {
        lastblocknumberused = (block.number-1)  ;               
        lastblockhashused = block.blockhash(lastblocknumberused);
    }

    function getTest1() constant returns (bytes32) {
        bytes32 number1 =lastblockhashused;
        return number1 & 0xfff;
    }
}

Respuestas (3)

O simplemente elimine su number1variable por completo, mientras recuerda cambiar el tipo de devolución:

function getTest1() constant returns (uint) {
        return uint(lastblockhashused) & 0xfff;
    }
Probé esto en la versión 0.5.12 de sol y no funcionó. ¿Me estoy perdiendo de algo?

Simplemente puede convertir bytes32 a uint con uint(number1).

Tengo una pregunta adicional relacionada con este ethereum.stackexchange.com/questions/3461/…
Ya no a partir de la solidez ^0.5.0
@PaulRazvanBerg, ¿cómo se supone que debemos hacer esta conversión en 0.5.0 ++?
@JoãoQuintanilha No sé .. pero debe haber una solución aquí en alguna parte.

puede usar la excelente biblioteca @pipermerriam: ethereum-string-utils con la función

function bytesToUInt(uint v) constant returns (uint ret)

Hace exactamente lo que quieres.

Se puede usar como una biblioteca copiando el .sol o usando llamadas de contrato contra vía0xcca8353a18e7ab7b3d094ee1f9ddc91bdf2ca6a4

Si bien esto puede responder teóricamente a la pregunta, sería preferible incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia.