¿Cómo convertir bytes32 a uint8 en solidity ^0.5.0?

Puedo ver que las conversiones de bytes a uint solían ser mucho más fáciles en versiones anteriores de solidity. Ahora, usando la misma sintaxis, me sale este error:

TypeError: conversión de tipo explícita no permitida de "bytes32" a "uint8"

Sé acerca de la biblioteca de Piper Merriam , pero no agregaría tanto código solo para una pequeña conversión de tipo. ¿No hay una forma más elegante?

Usando la solidez 0.5.2.

Respuestas (1)

No creo que lo haya sido nunca porque byteses una matriz dinámica, bytelo que significa que tiene un archivo length. ¿Es posible que hayas visto bytes32la conversión a unit? Eso es totalmente aceptable ya que ambos son palabras de 32 bytes.

Esto compila bajo 0.4.25 también 0.5.2.

contract Bytes {

    function convert(bytes32 b) public pure returns(uint) {
        return uint(b);
    }
}

Por otro lado, esta conversión es un problema en todos los casos que conozco.

contract Bytes {

    function convert(bytes b) public pure returns(uint) {
        return uint(b);
    }
}

En mi opinión , la conversión de bytesy stringa números, la manipulación de cadenas, etc. son cuestiones problemáticas que, por lo general , deberían ser tratadas por los clientes de software en lugar de sobrecargar los contratos con tales preocupaciones. Es un caso en el que el equipo del contrato debe resistirse fuertemente a sobrecargar el contrato con preocupaciones que los clientes de software son capaces de resolver.

Espero eso ayude.

De hecho, fue una bytes32conversión uint8lo que vi. Interesante, ahora en solidity ^0.5 puedes hacer uint(b)pero no puedes hacer uint8(b). Supongo uint8(uint(b))que funcionaría, pero me pregunto si hay algún lugar donde esto esté documentado. No pude encontrar nada en los documentos de solidez para 0.5.2
Gracias por aceptar la respuesta. TBH, no estoy seguro sobre el estado de los documentos para esto.