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;
}
}
O simplemente elimine su number1
variable por completo, mientras recuerda cambiar el tipo de devolución:
function getTest1() constant returns (uint) {
return uint(lastblockhashused) & 0xfff;
}
Simplemente puede convertir bytes32 a uint con uint(number1)
.
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
joão quintanilha